如何在 PostgreSQL 11.1 中将现有列更改为标识

How can i change existing column as Identity in PostgreSQL 11.1

我想将我现有的列更改为 Postgres 数据库中的自动标识。
我尝试使用以下脚本,但它不起作用。
让我知道您是否有相同的解决方案
我不想使用 postgres SEQUENCE。我想使用 GENERATED ALWAYS AS IDENTITY.

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

假设您有一个 table patient 之前创建为

CREATE TABLE patient( patientid int, col1 int );

并插入一行

INSERT INTO patient VALUES(1,5);

首先创建一个从 ID 的最大值迭代 +1 开始的序列,并将其设为 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

正在关注 the documentation

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

如果该列还没有约束,则添加 NOT NULL 约束。可选子句 START WITH start 更改记录的序列起始值。

DB<>Fiddle.

中测试