Postgresql

如何將 PostgreSQL 10 標識列添加到包含行的現有表中?

  • March 13, 2018

我有一個包含一些行的表,我嘗試使用以下命令添加一個標識列:

ALTER TABLE sourceTable 
   ADD COLUMN ogc_fid int                
       GENERATED BY DEFAULT AS IDENTITY;

建議使用上面的命令作為此問題的答案:

但我得到:

錯誤:列“ogc_fid”包含空值

SQL 狀態:23502

看起來表的現有行沒有自動生成標識,但導致此錯誤(如果表沒有行,該命令可以正常工作)。有任何想法嗎?我是否必須首先為要添加的列生成值DEFAULT nextval('some_sequence')?或者在 PostgreSQL 10 中有更好的方法嗎?

我無法用目前的 Postgres 10.3 重現這一點。(這個錯誤永遠不會發生。)簡單測試:

dbfiddle在這裡

懷疑你正在執行一個過時的點版本。Postgres 10.2修復了一些完全適合您的情況的錯誤。手冊:

  • 修復在插入標識列時應用正確預設值的各種失敗(Michael Paquier,Peter Eisentraut)

在幾種情況下,特別是COPYALTER TABLE ADD COLUMN,沒有應用預期的預設值,而是插入了一個空值。

如果是這樣,升級應該可以解決您的問題。

考慮項目政策

我們始終建議所有使用者針對正在使用的主要版本執行最新的可用次要版本。

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