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

时间:2019-04-07 04:11:22

标签: postgresql identity ddl

我想将现有的列更改为Postgres数据库中的“自动身份”。
我尝试使用以下脚本,但无法正常运行。
让我知道您是否有相同的解决方案
我不想使用postgres SEQUENCE。我想使用始终作为身份标识

Full

2 个答案:

答案 0 :(得分: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 :(得分: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