Как я могу изменить существующий столбец как личность в PostgreSQL 11.1 - PullRequest
1 голос
/ 07 апреля 2019

Я хотел бы изменить свой существующий столбец на «Автоматическая идентификация» в базе данных Postgres.
Я пытался использовать приведенный ниже скрипт, но он не сработал.
Дайте мне знать, если у вас есть решение для того же
Я не хочу использовать postgres SEQUENCE.Я хотел бы использовать ВСЕГДА В КАЧЕСТВЕ ИДЕНТИЧНОСТИ .

ALTER TABLE public.patient ALTER COLUMN patientid Type int4 
USING patientid::int4 GENERATED ALWAYS AS IDENTITY;

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

После документации

ALTER TABLE patient 
    ALTER patientid SET NOT NULL,
    ALTER patientid ADD GENERATED ALWAYS AS IDENTITY (START WITH 2);

Добавьте ограничение NOT NULL, если столбец еще не имеет ограничения.Необязательный пункт START WITH start изменяет записанное начальное значение последовательности.

Проверьте это в DB <> Fiddle.

1 голос
/ 07 апреля 2019

Предположим, у вас есть таблица patient, ранее созданная как

CREATE TABLE patient( patientid int, col1 int );

, и строка, вставленная как

INSERT INTO patient VALUES(1,5);

. Сначала создайте последовательность, начинающуюся с +1, повторяемую из максимального значенияID и сделайте его default для вашего столбца

CREATE SEQUENCE mySeq START WITH 2;
ALTER TABLE patient ALTER COLUMN patientid SET DEFAULT nextval('mySeq');

и преобразуйте ваш столбец в первичный ключ

ALTER TABLE patient ALTER COLUMN patientid SET NOT NULL;
ALTER TABLE patient ADD CONSTRAINT uk_patientid UNIQUE (patientid);

всякий раз, когда вы вставляете новые строки, такие как

INSERT INTO patient(col1) VALUES(10);
INSERT INTO patient(col1) VALUES(15);

вы заметите, что вы успешно создали свой столбец как столбец идентификаторов

SELECT * FROM patient

patientid  col1
---------  ----
1          5
2          10
3          15
...