PostgreSQL插入数据时主键冲突异常(ERROR:duplicate key value violates unique constraint)

编程入门 行业动态 更新时间:2024-10-19 20:24:32

PostgreSQL插入数据时<a href=https://www.elefans.com/category/jswz/34/1771236.html style=主键冲突异常(ERROR:duplicate key value violates unique constraint)"/>

PostgreSQL插入数据时主键冲突异常(ERROR:duplicate key value violates unique constraint)

异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复;本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告。本人所有文章仅在CSDN、掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是盗文!


本人是使用django开发的网页上线后,手写脚本导入旧版网站数据导致了此问题;后来在由于一些意外迁移生产服务器时再次碰到,决定写一篇博客来记录一下。

问题描述

对django的api接口进行请求返回500,无法插入数据,手动执行SQL报错如下:

ERROR:  duplicate key value violates unique constraint "xxx"
问题原因

如题,已经说明了,是主键冲突异常,具体的导致原因则是postgresql不会像mysql一样(或许mysql也会?我不知道)每次插入数据时重新确认自增主键的取值,而是会使用缓存提高效率。

这就导致某些情况下插入数据(例如SQL语句中指定了ID)不会更新这个自增主键下一个取值的缓存,进而在下次插入时触发错误。

解决方案
SELECT setval('TABLE_COLUMN_seq', (SELECT max(COLUMN) FROM "TABLE"));

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

SELECT setval('user_id_seq', (SELECT max(id) FROM "user"));
报错及解决

如果你不幸和我一样遇到了这个报错:

ERROR:  currval of sequence "user_id_seq" is not yet defined in this session

请尝试先执行如下语句:

SELECT nextval(pg_get_serial_sequence('user', 'id'));

具体哪些字段需要替换不用我再说了吧~

参考资料
  • POSTGRESQL 插入数据时主键冲突异常_ant98002的博客-CSDN博客
  • Postgresql – ERROR: currval of sequence “rss_sub_source_id_seq” is not yet defined in this session – iTecTec

更多推荐

PostgreSQL插入数据时主键冲突异常(ERROR:duplicate key value violates unique constraint)

本文发布于:2024-03-08 23:39:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722874.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:主键   冲突   异常   数据   PostgreSQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!