首页 > 数据库 >解决PostgreSQL插入数据时主键ID重复问题

解决PostgreSQL插入数据时主键ID重复问题

时间:2023-03-21 12:33:05浏览次数:44  
标签:PostgreSQL 主键 插入 student 序列 ID id

问题

执行以下插入数据语句

INSERT INTO student(name) values('Tony');

抛出如下异常

ERROR:  duplicate key value violates unique constraint "student_pkey"
DETAIL:  Key (id)=(2) already exists

以上的id为自增主键,但是在插入数据的时候无法插入。

原因

在PostgreSQL中,自增主键是通过表的序列来匹配值的(上面例子中的序列为student_id_seq)。

由于当前表中已经存在id为2的数据,而当前的序列student_id_seq的值仍然为2,所以数据插入失败。

在PostgreSQL中,当我们拷贝、同步数据到一张新的表,或者插入数据时带上自增id字段等都不会影响序列的变化,所以才出现了表的记录和序列不一致的情况。

解决方法

将表的序列值更新为表记录的id最大值,执行以下SQL语句

SELECT setval('student_id_seq', (SELECT max(id) FROM student));

更新完毕,再次执行插入语句即可。

标签:PostgreSQL,主键,插入,student,序列,ID,id
From: https://www.cnblogs.com/blueberry-mint/p/17239575.html

相关文章

  • ssh报错:WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
    一、现象ssh远程连接服务器时,显示如下提示 二、原因WARNING:REMOTEHOSTIDENTIFICATIONHASCHANGED!翻译过来就是警告:远程主机标识已更改!此报错是由于远程的主......
  • Idea实现微服务批量顺序启动
    前言话不多说,直接开干,有如下微服务,common-util只是工具,没有相应启动类:  1.唤起service方式1View-->ToolWindows-->Services方式2Alt+F8  2.Editconf......
  • 一手遮天 Android - Resource: 读取 meta-data 数据
    项目地址https://github.com/webabcd/AndroidDemo作者webabcd一手遮天Android-Resource:读取meta-data数据示例如下:/resource/MetaDataDemo1.java/***......
  • 一手遮天 Android - UI: 闪屏页(启动页)
    项目地址https://github.com/webabcd/AndroidDemo作者webabcd一手遮天Android-UI:闪屏页(启动页)示例如下:/SplashActivity.java/***闪屏页(启动页)**程......
  • PostgreSQL查询所有表的信息
    查询PostgreSQL所有表信息有以下两种方式:使用工具提供的\d命令查询使用SQL语句进行查询方法一:通过命令行查询登录:psql-U用户名\l:查看系统中现存的数据库\c:切换库......
  • Android开发-Android操作系统简介
    01.  系统简介1.1 Android名词Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、......
  • idea不同页面多开项目
         ......
  • 【Unity3D】VideoPlayer组件
    1简介​AudioSource组件中介绍了音频的播放,本文将介绍基于VideoPlayer组件实现视频播放。​VideoPlayer属性面板如下:Source:视频源类型,有2种类型:VideoC......
  • #yyds干货盘点#PostgreSQL数据库备份与恢复
    备份所有数据库pg_dumpall>db.out复制代码恢复所有数据库#执行这个命令的时候连接到哪个数据库无关紧要,因为pg_dumpall创建的脚本将会包含恰当的创建和连接数据库的命......
  • idea创建maven项目默认访问页面的修改
    在web.xml文件中的<web-app标签>之间加入代码<welcome-file-list> <welcome-file>这儿写你要显示的页面名称</welcome-file></welcome-file-list>之后就能跳转到对应的......