自增主键冲突

postgresql 插入数据时主键冲突异常

ERROR:duplicate key value violates unique constraint

问题原因

主键冲突异常,具体的导致原因则是 postgresql 每次插入数据时使用缓存,而不会重新确认自增主键的取值。这就导致某些情况下插入数据(例如SQL语句中指定了ID)不会更新这个自增主键下一个取值的缓存,进而在下次插入时触发错误。

解决方案

重置序列对象的计数器数值

SELECT setval('TABLE_COLUMN_seq', (SELECT max(COLUMN) FROM "TABLE"));

其中 TABLE 是表名,COLUMN 是自增的那一列的名字,例如:

SELECT setval('user_id_seq', (SELECT max(id) FROM "user"));

参考文档:postgresql 中的序列nextval详解 - 路饭网

你可能感兴趣的:(数据库,数据库,postgresql,sql)