我想在Postgres数据库中将我现有的列更改为Auto Identity。 我试过下面的脚本,但它不起作用。 如果您有相同的解决方案,请告诉我 我不想使用postgres SEQUENCE。我想使用GENERATED ALWAYS AS IDENTITY。
ALTER TABLE public.patient ALTER COLUMN patientid Type int4
USING patientid::int4 GENERATED ALWAYS AS IDENTITY;
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.测试它
假设您有一个先前创建的表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