我想将现有的列更改为Postgres数据库中的“自动身份”。
我尝试使用以下脚本,但无法正常运行。
让我知道您是否有相同的解决方案
我不想使用postgres SEQUENCE。我想使用始终作为身份标识。
Full
答案 0 :(得分:2)
ALTER TABLE patient
ALTER patientid SET NOT NULL,
ALTER patientid ADD GENERATED ALWAYS AS IDENTITY (START WITH 2);
如果列还没有约束,请添加NOT NULL
约束。可选子句START WITH start
更改序列的记录起始值。
答案 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