Postgresql
將 PG 中的現有列更改為自動增量主鍵
我在 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;