Postgresql

將 PG 中的現有列更改為自動增量主鍵

  • March 1, 2022

我在 Postgresql 中有一個數據庫,它是從 SQL Server 遷移的(僅數據)。

在 SQL Server 上,此數據庫中的表具有以下列:

measure_id
datum
measure

其中measure_id是自動增量主鍵,datum是日期時間,measure是浮點數。

在 Postrgresql 中遷移後,measure_id是 bigint 類型的列。

既然我的表中已滿是數據,如何將此列 ( measure_id) 更改為 bigserial 並將其分配為主鍵?

創建一個序列並將其用作列的預設值:

create sequence measures_measure_id_seq
  owned by measures.measure_id;

alter table measures
  alter column measure_id set default nextval('measures_measure_id_seq');

commit;

這基本上是做什麼serial的。

有關詳細資訊,請參閱手冊:

http ://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL


從 Postgres 10 開始,推薦的方法是使用標準兼容identity列,而不是串列(或 bigserial)。

alter table measures
  alter measure_id add generated always as identity;

在這兩種情況下,您都必須調整序列以匹配列中的目前最大值measure_id

select setval(pg_get_serial_sequence('measures', 'measure_id'), max(measure_id))
from measures;

引用自:https://dba.stackexchange.com/questions/78732