INSERT INTO 排除 ID 列违反主键唯一性约束
INSERT INTO excluding ID column violates primary key uniqueness constraint
我有一个带有 serial
ID 列的 Postgres 10.6 table。
当我尝试插入时:
INSERT INTO table (col1, col2) VALUES ('foo', 'bar');
从列列表中排除 ID 列,我得到:
ERROR: duplicate key value violates unique constraint "customer_invoice_pkey"
Detail: Key (id)=(1234) already exists.
查询的后续运行会增加错误消息中的 ID(1235、1236 等)
怎么会这样?
具有 serial
列不会阻止您插入具有 id
显式值的行。序列值只是在 INSERT
语句中未指定 id
时使用的默认值。
所以肯定有一些“流氓”插入的那种。从 PostgreSQL v11 开始,您可以使用标识列 (GENERATED ALWAYS AS IDENTITY
) 来更难覆盖序列值。
您可以使用 setval
函数将序列设置为高于 table 中的最大值 id
的值来解决该问题。
我有一个带有 serial
ID 列的 Postgres 10.6 table。
当我尝试插入时:
INSERT INTO table (col1, col2) VALUES ('foo', 'bar');
从列列表中排除 ID 列,我得到:
ERROR: duplicate key value violates unique constraint "customer_invoice_pkey"
Detail: Key (id)=(1234) already exists.
查询的后续运行会增加错误消息中的 ID(1235、1236 等)
怎么会这样?
具有 serial
列不会阻止您插入具有 id
显式值的行。序列值只是在 INSERT
语句中未指定 id
时使用的默认值。
所以肯定有一些“流氓”插入的那种。从 PostgreSQL v11 开始,您可以使用标识列 (GENERATED ALWAYS AS IDENTITY
) 来更难覆盖序列值。
您可以使用 setval
函数将序列设置为高于 table 中的最大值 id
的值来解决该问题。