Как могу задать Автоинкремент и Primary Key для уже существующего столбца в PostgreSQL?

Нужно для уже имеющегося столбца "ID" задать автоинкремент что бы автоматически генерировались значения в столбце при создании новых строк и Primary Key.

Пробую это сделать следующим запросом:

ALTER TABLE person ALTER COLUMN ID SET DATATYPE BIGSERIAL NOT NULL PRIMARY KEY;

Получаю ошибку. Поправьте пожалуйста как будет сделать правильно?


Ответы (2 шт):

Автор решения: eri

В постгресе нет автоинкремента. SERIAL работают только в create table. Вместо этого создается последовательность и назначается значением по умолчанию. Например:

CREATE TABLE content_tb ( id SERIAL, ..., title character varying(512) NOT NULL, body text NOT NULL, ... );

автоматически транслируется в:

CREATE SEQUENCE content_tb_id_seq; CREATE TABLE content_tb ( id integer DEFAULT nextval('content_tb_id_seq') NOT NULL, ..., title character varying(512) NOT NULL, body text NOT NULL, ... );

Сделайте CREATE SEQUENCE и Alter на default.

→ Ссылка
Автор решения: Rabban Keyak
ALTER TABLE person ALTER COLUMN ID ADD GENERATED ALWAYS AS IDENTITY;
→ Ссылка