11

私は最近、奇妙なことに出くわしました。以下は有効な SQL です。

DELETE FROM customer *;

PostgreSQL DELETEのドキュメントによると、星は の可能な値ですoutput_expression

各行が削除された後に DELETE コマンドによって計算され、返される式。式では、USING にリストされているテーブルまたはテーブルの任意の列名を使用できます。* と書くと、すべての列が返されます。

星の有無で試してみましたが、違いがわかりません。実際、テーブル名の後にどんな単語でも入れることができ、それは受け入れられます。実際の列名である必要さえありません。余分なものは何も返されません。

db=> DELETE FROM customer wheeeeeee;
DELETE 19

では、それは何をし、何に使用できるのでしょうか?

質問は PostgreSQL メーリング リストにも投稿されました

4

1 に答える 1

5

アスタリスクはoutput_expression ではないRETURNINGため、キーワードを使用する必要があります。代わりに、クエリに子テーブルを含めるための古い、時代遅れの構文です。(文書化されている最後のバージョンはPostgreSQL 8.1のようです。Tom Lane が以下のリンクの投稿で指摘しているように、構文はまだ有効であるため、これは文書化のバグです。)

PostgreSQL 7.1 以降、これはデフォルトであり ( sql_inheritanceが off に設定されていない限り)、ONLYキーワードは反対に使用されるため、* はあまり役に立ちません。

PostgreSQL メーリング リストの Tom Lane によるこの説明投稿を参照してください。

于 2012-09-16T12:59:20.747 に答える