目录
- 1 问题
- 2 解决
1 问题
postgresql插入数据时主键冲突异常(ERROR:duplicate key value violates unique constraint)
我出现的异常
代码语言:javascript复制org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "xxl_job_info_pkey"
是主键冲突异常,每次插入数据时重新确认自增主键的取值,而是会使用缓存提高效率。
这就导致某些情况下插入数据(例如SQL语句中指定了ID)不会更新这个自增主键下一个取值的缓存,进而在下次插入时触发错误。
2 解决
代码语言:javascript复制SELECT setval('TABLE_COLUMN_seq', (SELECT max(COLUMN) FROM "TABLE"));
其中 TABLE 是表名,COLUMN 是自增的那一列的名字,例如:
代码语言:javascript复制SELECT setval('user_id_seq', (SELECT max(id) FROM "user"));
如果执行以上的sql语句报错 ERROR: currval of sequence “user_id_seq” is not yet defined in this session
那么最开始执行
代码语言:javascript复制SELECT nextval(pg_get_serial_sequence('user', 'id'));