尝试将 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
列(它们确实在后台使用序列)。要将现有列转换为标识列,您可以使用:
或者
generated always
如果您尝试绕过值的自动生成,我更喜欢它,因为它会出现错误。如果表已经包含数据,则需要将底层序列与表中的值同步:
如文档中所述,
OWNED BY
指的是该序列所属的表和列,而不是拥有用户。我建议您以
CREATE SEQUENCE
拥有该表的用户身份执行,或者如果这不可行,请将所有者更改为您自己,创建序列,然后将表的所有者和序列更改回原始所有者。