当前位置: 首页 > article >正文

PostgreSQL解决序列(自增id)自动增长冲突

背景

一般表的id主键我们都是设置为自增序列。

但是如果我们在插入一些数据的时候手动指定id,那么自增序列不会跟随我们手动设置的id增长。

就会出现下次不设置id的时候自增到我们手动指定的id导致主键冲突bug

举个例子

现在数据有

id
1
2
3

现在我们手动插入数据比如

insert into xiaozou(id) values(4)

这时候我们的数据变成

id
1
2
3
4

实际我们的id自增序列还停留在3。

如果我们插入数据不指定id。自动生成的id就还是4,从而导致主键冲突

解决方案

设置自增序列为当前id的最大值+1

SELECT setval('xiaozou_id_seq', (SELECT MAX(id) FROM xiaozou)+1);

xiaozou_id_seq是序列名,xiaozou是表名

如果不知道序列名可以通过如下方式查询

SELECT column_name, column_default
FROM information_schema.columns
WHERE table_name = 'xiaozou' AND column_default LIKE 'nextval%';

http://www.kler.cn/a/229049.html

相关文章:

  • 基础入门-反弹Shell渗透命令Reverse反向Bind正向利用语言文件下载多姿势
  • python管理工具:conda部署+使用
  • 在Mac mini上实现本地话部署AI和知识库
  • Golang学习笔记_26——通道
  • 【JavaScript】基础内容,HTML如何引用JavaScript, JS 常用的数据类型
  • WPF实现动态四宫格布局
  • 电路设计(10)——超温报警电路的proteus仿真
  • Windows10安装VScode + mingw64 + GSL
  • 【C++搜索二叉树】
  • HuggingFace库中BERTForxxx模型代码详细分析 使用BERT进行无监督预训练
  • 第97讲:MHA高可用集群模拟主库故障以及修复过程
  • Java大致面试题及答案,文档格式为md格式
  • 【计算机二级考试C语言】C排序算法
  • 各种编程语言送祝福:2024龙年大吉
  • sqli.labs靶场(54-65关)
  • 适用于 Windows 和 Mac 的 16 款最佳数据恢复软件
  • 软件漏洞概念与原理
  • Zookeeper相关面试准备问题
  • 改变终端安全的革命性新兴技术:自动移动目标防御技术AMTD
  • 【自定义序列化器】⭐️通过继承JsonSerializer和实现WebMvcConfigurer类完成自定义序列化
  • oracle视图二次查询慢
  • C++类与对象(下)
  • 第十二讲_JavaScript浏览器对象模型BOM
  • Redis 持久化对性能有何影响?
  • LLM(大语言模型)——大模型简介
  • 计算机网络——02网络边缘