如何在postgres中将现有的COLUMN类型更改为SERIAL?

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

以下语句不起作用:

ALTER TABLE my_table
ALTER COLUMN column_id set default nextval('my_table_column_id_seq');

那么如何将id列更改为自动递增?

错误:

null value in column \"column_id"\ violates non null constraint.

当我插入没有column_id时会发生这种情况。我需要它是自动递增。Postgres版本为12。

我的插入:

INSERT INTO my_table (column2, column3)
VALUES ('rndmstring', 5);
postgresql sequence ddl postgresql-12
2个回答
1
投票

您可以从column_id的现有值的最大值+1开始创建序列:

CREATE SEQUENCE my_table_column_id_seq START WITH <MAX VALUE OF column_id+1>;

在检查此查询后是否>]

SELECT 1
  FROM my_table
 HAVING COUNT(distinct column_id)=COUNT(column_id)
    AND SUM(CASE WHEN column_id IS NULL THEN 0 ELSE 1 END)=
        SUM(CASE WHEN column_id IS NULL THEN 1 ELSE 1 END);

对于相关列的值的非空和唯一性返回1,然后使用您现有的命令

ALTER TABLE my_table
ALTER COLUMN column_id SET DEFAULT nextval('my_table_column_id_seq');

命令并确保column_id的所有现有值都是唯一的,然后发出:

ALTER TABLE my_table ADD PRIMARY KEY(column_id);

Demo


0
投票

已解决。我在我的端点中将id设置为参数以创建新表。

© www.soinside.com 2019 - 2024. All rights reserved.