Синтаксическая ошибка при наличии столбца с первичным ключом - PullRequest
0 голосов
/ 22 ноября 2018

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

ALTER TABLE webinars_identities ADD COLUMN IF NOT EXISTS id uuid

Это будет работать, но если я сделаю

ALTER TABLE webinars_identities ADD COLUMN IF NOT EXISTS id uuid PRIMARY KEY DEFAULT uuid_generate_v4();

Он говорит, что пропускает таблицу изменений, но по какой-то причине вылетает сразу после:

NOTICE:  column "id" of relation "webinars_identities" already exists, skipping
ERROR:  multiple primary keys for table "webinars_identities" are not allowed

Мой оригинальный рабочий запрос был

ALTER TABLE webinars_identities id uuid PRIMARY KEY DEFAULT uuid_generate_v4();

Но это не повторяется без ошибок.

Что я здесь не так делаю?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

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

DO $body$ 
 BEGIN 
    ALTER TABLE atable ADD COLUMN  id int primary key; --DEFAULT uuid_generate_v4()
 EXCEPTION
 WHEN duplicate_column THEN

  RAISE NOTICE 'ERROR: %,%',SQLSTATE,SQLERRM;

END $body$;

Это сработает в первый раз и не работаетпотерпеть неудачу на всех последующих попытках, но выдает сообщение.Все остальные ошибки, если они будут обнаружены в вашем утверждении, будут рассматриваться как исключения.

NOTICE:  ERROR: 42701,column "id" of relation "atable" already exists
DO
0 голосов
/ 22 ноября 2018

Попробуй это.

DO $$ BEGIN TABLE atable ADD COLUMN IF NOT EXISTS id int primary key ; exception when others then null ; END$$;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...