POSTGRESQL 9+: Как удалить default / sequence, если она существует, из столбца? - PullRequest
0 голосов
/ 13 июня 2019

Я пытаюсь удалить ограничение по умолчанию из столбца идентификатора. Этот запрос должен использоваться для нескольких таблиц, в которых идентификатор может иметь или не иметь это ограничение. Согласно postresql 9+ doc (я использую 9.4), условие «если существует» больше не может использоваться для удаления ограничения. (См. https://www.postgresql.org/message-id/25298.1281743639%40sss.pgh.pa.us и https://www.postgresql.org/docs/9.4/sql-altertable.html).

Я хотел бы знать, есть ли обходной путь для этого, кроме наличия двух версий запроса, один из которых содержит отбрасывание, другой - нет, и проверяя каждую таблицу вручную, чтобы решить, какой запрос использовать.

Попытка «если существует» возвращает синтаксическую ошибку, но выполнение сброса без условия, по-видимому, вообще не возвращается, если по умолчанию нет (я ждал несколько минут, но ничего не происходило).

Давайте использовать таблицу t с именем первого столбца id типа int без значения по умолчанию:

Возвращает синтаксическую ошибку:

ALTER TABLE t
ALTER COLUMN id
DROP DEFAULT if exists;

И это не возвращается, когда нет значения по умолчанию:

ALTER TABLE t
ALTER COLUMN id
DROP DEFAULT;

Я хочу, чтобы запрос отбрасывал значение по умолчанию из столбца id (последовательность за ним все еще будет использоваться, я просто хочу, чтобы id не зависел от него напрямую), если id имеет значение по умолчанию, иначе он должен сделать нет ничего.

...