Подтвердить что ты не робот

Как преобразовать целое число в последовательный

У меня есть таблица с столбцом первичного ключа "gid", а ее тип - "Integer NOT NULL". Я хочу преобразовать его в "Serial NOT NULL", чтобы я мог вставить некоторые значения в эту таблицу. Я использовал следующие команды для преобразования его в серийный:

CREATE SEQUENCE test_table_gid_seq
        INCREMENT 1
        MINVALUE 1
        MAXVALUE 2147483648 START 1
        CACHE 1;

ALTER TABLE test_table ALTER COLUMN gid
        SET DEFAULT nextval('test_table_gid_seq'::regclass);

Эта команда преобразует целое число в последовательный. Но когда я ввел некоторые данные в таблицу, произошла ошибка:

ОШИБКА: дублирующее значение ключа нарушает уникальное ограничение "pk_test".

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

4b9b3361

Ответ 1

Выберите максимальное значение столбца gid (max_gid):

SELECT max(gid) FROM test_table;

И используйте его как начальную точку для последовательности (возможно, max_gid + 1):

ALTER SEQUENCE test_table_gid_seq RESTART WITH max_gid;