INSERT INTO排除ID列违反了主键唯一性约束

问题描述 投票:0回答:1

我有一个带有serial ID列的Postgres 10.6表。

[当我尝试插入时:

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等)

怎么会这样?

postgresql postgresql-10
1个回答
1
投票

具有serial列并不阻止您插入具有id显式值的行。序列值只是id语句中未指定INSERT时使用的默认值。

因此,肯定有一些这种“流氓”插入物。从PostgreSQL v11开始,您可以使用标识列(GENERATED ALWAYS AS IDENTITY)来更难覆盖序列值。

您可以使用setval功能将序列设置为大于表中最大值id的值,以解决此问题。

热门问题
推荐问题
最新问题