【问题标题】:PhpPgAdmin Syntax error when creating View创建视图时出现 PhpPgAdmin 语法错误
【发布时间】:2010-06-30 17:24:25
【问题描述】:

我正在尝试在 PhpPgAdmin (PostGreSQL db) 中创建一个具有以下 SQL 语句的视图:

DELETE FROM myTable WHERE myTable.error IS NULL;

PhpPgAdmin 给我以下错误:

错误:在字符 59 处或附近的“DELETE”处出现语法错误 在声明中: CREATE OR REPLACE VIEW "Schema1"."Delete empty errors" AS DELETE FROM myTable WHERE myTable.error IS NULL;

据我所知,这条 SQL 语句是有效的,并且我拥有该表的删除权限。视图中不允许使用 DELETE 语句吗?任何想法我做错了什么?

【问题讨论】:

    标签: sql postgresql views phppgadmin updatable-views


    【解决方案1】:

    视图仅用于显示来自 SELECT 语句的数据(通常在 SELECT 很复杂时)。视图不能包含 DELETES、UPDATES 或 INSERTS。

    也许您想要function

    编辑:正如 OMG Ponies 指出的那样,您可以拥有可更新的视图,但您可以在其中向现有视图发出 DELETE,然后使用 RULE 将查询重写为 DELETE。

    请不要包装函数调用来执行 DELETE 作为视图中的副作用。这是出乎意料的,每次发生这种情况时,耶稣都会射杀一只小狗。

    【讨论】:

    • Postgres 支持通过规则更新视图:postgresql.org/docs/8.2/static/sql-createview.html
    • 并且函数调用可以封装在视图中。
    • 好的,你可以使用规则来更新视图,并且可以在视图中包装函数调用,但我从未在视图中看到普通的 DELETE
    • 虽然,是的,您可以拥有可更新的视图,但这似乎并不是真正需要的。他并没有试图从视图中删除,他试图创建一个删除视图......这是不同的。
    • 其实你是对的,我需要使用一个函数。我只是想执行一次清理大型数据集的任务。所以我接受了你的建议并创建了一个函数,但似乎没有办法从 PhpPgAdmin 中执行该函数。这种事情有什么推荐的?
    猜你喜欢
    • 2011-12-30
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 2016-10-24
    相关资源
    最近更新 更多