Я запускаю скрипт для обновления структуры таблицы, моя проблема связана со столбцом первичного ключа (id), запрос создает новый столбец id каждый раз, когда я запускаю свой скрипт.
Это первый разчто я пытаюсь написать скрипт для обновления структуры базы данных.База данных была создана старой версией приложения, и теперь мы хотим выпустить новую версию приложения, но для достижения этой цели я написал скрипт, который в итоге создает таблицы, если они не существуют, добавляя столбцы втаблицы, если они не существуют, удаление старых индексов и создание новых и т. д.
Проблема возникает, когда сценарии добавляют первичный ключ в таблицы, в базе данных таблицы имеют первичный ключстолбец типа целое число.Но мой запрос не обнаруживает этот столбец первичного ключа, и он создает новый столбец с тем же именем и типом данных, по крайней мере, это то, что я вижу в PGAdmin v4.8.
Первоначально столбцы первичного ключа были созданыиспользуя тип serial, а затем PostgreSQL автоматически создает последовательность и использует ее для первичного ключа.
Как избежать дублирования столбцов первичного ключа?
Первоначально столбец был создан следующим образом
create table mytable(
id serial,
.
.
.
);
И если я посмотрю в таблице, столбец будет выглядеть следующим образом, что означает, что PostgreSQL создал последовательность mytable_id_seq и использовал ее для значения автоинкремента столбца первичного ключа.
id integer NOT NULL DEFAULT nextval('mytable_id_seq'::regclass)
Но после того, как я выполню следующий запрос и посмотрю в таблице, у него появится новый столбец с тем же именем и типом данных, что и в предыдущих строках.
ALTER TABLE public.mytable ADD COLUMN IF NOT EXISTS id serial;
Я ожидаю увидеть только один столбец, независимо от того, сколько раз я выполню запрос.