Подтвердить что ты не робот

Что делает выражение output_expression для "DELETE FROM table"?

Недавно я столкнулся с странностью. Допустим, что SQL:

DELETE FROM customer *;

Документация для PostgreSQL DELETE говорит, что звезда является возможным значением для output_expression:

Выражение, которое должно быть вычислено и возвращено командой DELETE после каждая строка удаляется. Выражение может использовать любые имена столбцов таблицы или таблицы (ов), перечисленных в ИСПОЛЬЗОВАНИИ. Напишите *, чтобы вернуть все столбцы.

Я пробовал его с и без звезды и не вижу разницы. На самом деле, я могу поместить только что-нибудь одно слово после имени таблицы, и оно принято. Это даже не должно быть фактическое имя столбца. Ничего лишнего не возвращается.

db=> DELETE FROM customer wheeeeeee;
DELETE 19

Итак, что он делает и для чего я могу использовать его?

Вопрос также опубликован в списке рассылки PostgreSQL.

4b9b3361

Ответ 1

Звездочка не output_expression, для этого вам нужно будет использовать ключевое слово RETURNING. Вместо этого это старый, устаревший синтаксис для включения дочерних таблиц в запросы. (Последняя версия, для которой она документирована, выглядит PostgreSQL 8.1. Поскольку синтаксис по-прежнему действителен, это ошибка документации, поскольку точки Тома Лейна в приведенной ниже ссылке.)

Так как PostgreSQL 7.1 это значение по умолчанию (если sql_inheritance не выключено), а ключевое слово ONLY используется для противоположного, поэтому * не очень полезно.

См. этот пояснительный пост от Tom Lane в списке рассылки PostgreSQL.