Postgresql

創建序列時出錯

  • August 24, 2022

嘗試將 auto_increment 添加到現有列

ALTER TABLE table_name ALTER COLUMN id_column SET DEFAULT nextval('table_id_column_seq');

嘗試1:

CREATE SEQUENCE table_id_column_seq AS integer START 1 OWNED BY table.id_column;

錯誤:

錯誤:序列必須與其連結的表具有相同的所有者

嘗試2:

CREATE SEQUENCE table_id_column_seq AS integer START 1 OWNED TO postgres;

錯誤:

ERROR:  syntax error at or near "integer"
LINE 1: CREATE SEQUENCE table_id_column_seq integer START 1...
                                                    ^

應該是這樣嗎?

對於現代 Postgres 版本(即 >= 10),最好使用identity列(它們確實在後台使用序列)。

要將現有列轉換為標識列,您可以使用:

ALTER TABLE table_name 
  ALTER COLUMN id_column 
  ADD GENERATED ALWAYS AS IDENTITY;

或者

ALTER TABLE table_name 
  ALTER COLUMN id_column 
  ADD GENERATED BY DEFAULT AS IDENTITY;

generated always如果您嘗試繞過值的自動生成,我更喜歡它,因為它會出現錯誤。

如果表已經包含數據,則需要將底層序列與表中的值同步:

select setval(pg_get_serial_sequence('the_table', 'id_column'), max(id))
from the_table;

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