python - postgres 没有正确增加我的串行数据类型的 id
问题描述
我的数据库中有 500 条记录,当我删除 id =5 然后尝试重新插入相同的记录时,它没有正确更新序列。它在 id = 505 但我的最大 id 为 500 的位置插入新记录。我还使用以下查询更新事务前后的排序:SELECT setval(pg_get_serial_sequence('table_name', 'id'), max(id)) FROM表名;
尽管如此,它仍在不正确地增加序列。
id bigserial 主键 NOT NULL
任何帮助将不胜感激。谢谢
解决方案
删除作为序列已用于填充列的行不会更新序列。
如果您需要无间隙订购号,则不能使用序列。
请参阅https://www.postgresql.org/docs/9.5/sql-createsequence.html其中说:
因为 nextval 和 setval 调用永远不会回滚,如果需要“无缝”分配序列号,则不能使用序列对象。可以通过使用包含计数器的表的排他锁定来构建无间隙分配;但是这种解决方案比序列对象要昂贵得多,尤其是在许多事务同时需要序列号的情况下。
推荐阅读
- javascript - 如何与两个数组数据进行比较和更改?
- python - 如何使用fuzzywuzzy 获得此输出?
- android-studio - 在我的 android 应用程序中删除夜间模式 | 安卓工作室
- kubernetes - kubernetes中calico CNI如何找出每个节点分配了什么podcidr
- python - Keras:在添加掩蔽层后使用自定义损失编译模型时出错
- react-native - 在 React Native 项目中全局设置默认字体
- arrays - Angular获取具有其他键条件的数组的总和
- javascript - × 错误:元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但得到:对象
- php - 将 id 从 foreach 传递到 jquery modal
- flutter - 如何在颤动中管理 TextFormField 填充和边距?