如何在 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
更改记录的序列起始值。
中测试
我想将我现有的列更改为 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
更改记录的序列起始值。