我最近遇到了一个奇怪的事情.以下是有效的sql:
DELETE FROM customer *;
Postgresql DELETE的文档说明星是output_expression的一个可能值:
An expression to be computed and returned by the DELETE command after
each row is deleted. The expression can use any column names of the
table or table(s) listed in USING. Write * to return all columns.
我试过,没有明星,看不出有什么区别.事实上,我可以把任何单词放在桌子名后面,并且被接受.它甚至不必是一个实际的列名.没有额外的回报.
db=> DELETE FROM customer wheeeeeee; DELETE 19
那么它做什么,我可以用它呢?
解决方法
星号不是output_expression,因此您必须使用RETURNING关键字.而是一个旧的,过时的语法,用于在查询中包含子表. (最后一个版本的文档似乎是
PostgreSQL 8.1.由于语法仍然有效,它是一个文档错误,Tom Lane在下面链接中指出.)
因为Postgresql 7.1这是默认的(除非sql_inheritance被设置为off),而ONLY关键字是用于相反的,所以*并不是很有用.
见this explanatory post from Tom Lane on the PostgreSQL mailing list.