【问题标题】:Postgres - add sequential column to existing dataPostgres - 将顺序列添加到现有数据
【发布时间】:2021-11-07 19:28:12
【问题描述】:

我有一个现有的表,该表当前没有 id 列,并且在应该是唯一对的地方有很多重复的行 - 它很乱。示例:

 fips  | customer_id
-------+------------
 17043 |        2085
 17043 |        2085
 42091 |        4426
 42091 |        4426

customer_id/fips 应该是唯一的,但当前的代码和架构并没有强制要求。也没有 id 列,所以我没有唯一的方法来引用单行。

我想添加一个 id 列并分配连续整数,这样我就可以拥有一个唯一的主键。我该怎么办?

【问题讨论】:

  • 请务必公开您的 Postgres 版本 (SELECT version();)

标签: sql postgresql


【解决方案1】:

Postgres 10 添加了IDENTITY 列(如Gordon's answer 所示)。
在 Postgres 9.6(或任何版本)中,您可以改用 serial 列。

无论哪种方式,在同一命令中将其设为 PRIMARY KEY。这对于大桌子来说更便宜:

ALTER TABLE tbl ADD COLUMN tbl_id serial PRIMARY KEY;

或者:

ALTER TABLE tbl ADD COLUMN tbl_id int GENERATED ALWAYS AS IDENTITY PRIMARY KEY;

db小提琴here

IDENTITY 列是 PRIMARY KEY 自动。 Postgres 允许同一个表有多个 IDENTITY 列(即使这很少有用)。

见:

或者您清理混乱以使(fips, customer_id) 独一无二。那么这就是你的PK。见:

【讨论】:

    【解决方案2】:

    您可以简单地添加一个标识列:

    alter table t add column id int generated always as identity;
    

    Here 是一个 dbfiddle。

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      相关资源
      最近更新 更多