Change grammar for multiple actions in ALTER TABLE
В данный момент, у нас валидно:
ALTER TABLE t ADD COLUMN IF NOT EXISTS e INT, f INT
Однако, в PostgreSQL (как наш основной референс) запрос будет выглядеть иначе:
ALTER TABLE t ADD COLUMN IF NOT EXISTS e INT, ADD COLUMN IF NOT EXISTS f INT
Мы нарушаем две вещи:
- не указываем явно опциональный
IF (NOT) EXISTS(не только дляADD COLUMN, но и для остальных действий вALTER TABLE) - это создает неоднозначность желания пользователя; - ожидаем, что следующее действие будет идентично предыдущему. Например, если пользователь ввел
ALTER TABLE t ADD COLUMN e INT, то дополнив этот запрос, f INT- мы ожидаем, что пользователь продолжит добавлять новые атрибуты, но никак не удалять их или переименовывать, например. PostgreSQL позвляет в одном запросеALTER TABLEперечислять разные действия сколь угодно раз, а не одно и то же действие сколь угодно раз.
Edited by Kirill Bezuglyi