"DELETE FROM table"的output_expression有什么作用?

Bar*_*own 11 sql postgresql sql-delete

我最近遇到了一个奇怪的问题.以下是有效的SQL:

DELETE FROM customer *;
Run Code Online (Sandbox Code Playgroud)

PostgreSQL DELETE的文档说明星是一个可能的值output_expression:

删除每一行后由DELETE命令计算和返回的表达式.表达式可以使用USING中列出的表或表的任何列名.写*以返回所有列.

我在有星和没有星星的情况下尝试过它,看不出有什么区别.事实上,我可以在表名之后添加任何单个单词并且它被接受.它甚至不必是实际的列名.没有额外的东西返回.

db=> DELETE FROM customer wheeeeeee;
DELETE 19
Run Code Online (Sandbox Code Playgroud)

那么它做了什么以及我可以用它做什么?

问题也发布在PostgreSQL邮件列表上.

Mic*_*ski 5

星号不是 output_expression,为此你必须使用RETURNING关键字.相反,它是一种旧的,过时的语法,用于在查询中包含子表.(它记录的最后一个版本似乎是PostgreSQL 8.1.由于语法仍然有效,它是一个文档错误,正如Tom Lane在下面链接的帖子中指出的那样.)

由于PostgreSQL 7.1这是默认值(除非sql_inheritance设置为off)并且ONLY关键字用于相反的,所以*不是很有用.

请参阅PostgreSQL邮件列表中Tom Lane的解释性帖子.