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

问题描述 投票:1回答:2

我想在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;
postgresql identity ddl
2个回答
2
投票

关注the documentation

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
投票

假设您有一个先前创建的表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
© www.soinside.com 2019 - 2024. All rights reserved.