Как избежать дублирования столбцов первичного ключа в PostgreSQL v 10? - PullRequest
1 голос
/ 28 июня 2019

Я запускаю скрипт для обновления структуры таблицы, моя проблема связана со столбцом первичного ключа (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;

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

...