Postgresql
創建序列時出錯
嘗試將 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;