创建视图时出现 PhpPgAdmin 语法错误

Posted

技术标签:

【中文标题】创建视图时出现 PhpPgAdmin 语法错误【英文标题】:PhpPgAdmin Syntax error when creating View 【发布时间】: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 语句吗?任何想法我做错了什么?

【问题讨论】:

【参考方案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 中执行该函数。这种事情有什么推荐的?

以上是关于创建视图时出现 PhpPgAdmin 语法错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 if 语句创建函数时出现 Postgresql 语法错误

为 hsqldb 创建架构时出现语法错误

Redshift Spectrum 在创建嵌套数据时出现语法错误

BigQuery 在创建实体化视图时出现“缺少空格”错误

使用参数[duplicate]创建bash函数时出现语法错误

用SQL创建视图时出现对象名无效错误,怎么解决