Postgresql 序列

标签 postgresql sequence reset

当我从 Postgresql 表中删除所有记录,然后尝试重置序列以在插入时开始一个编号为 1 的新记录时,我得到不同的结果:

SELECT setval('tblname_id_seq', (SELECT COALESCE(MAX(id),1) FROM tblname));

这会将序列的当前值设置为 1,但下一条记录(实际上是第一条,因为还没有记录)的编号为 2!

而且我不能将它设置为0,因为序列中的最小值是1!

当我使用时:

ALTER SEQUENCE tblname_id_seq RESTART WITH 1;

插入的第一条记录实际上得到编号 1 !但是上面的代码不接受 SELECT 作为值而不是 1。

我想在没有记录的时候重新设置序号为1,那么第一条记录应该从1开始。但是当表中已经有记录时,我想重新设置顺序,以便下一条记录被插入将获得{highest}+1

有人对此有明确的解决方案吗?

最佳答案

使用setval 的三参数形式将is_called 标志设置为false,以便它为下一个nextval 返回序列的当前值 调用而不是立即生成一个新的。

http://www.postgresql.org/docs/current/interactive/functions-sequence.html

另请注意,您需要使用 COALESCE(MAX(id),0)+1,否则序列中的第一个值将是 MAX(id),这你知道已经存在。 (感谢斯蒂芬·丹恩)

关于Postgresql 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664912/

相关文章:

lisp - 可以在 Scheme REPL 中重置用户环境吗?

python - 在 TCP/IP 套接字连接中发送重置

Python Pandas - 如何从序列创建数据框

sql-server - 在 SQL 中给定多个约束条件下,如何找到具有相同值的连续行数?

PostgreSQL array_agg 命令

postgresql - 多对一 PostgreSQL 类(class)名称 : Unesco Heritage Sites Many-to-One

r - 对 r 中的连续整数进行分组并对组进行分析

android - 重置共享首选项?

c++ - postgreSQL 中 lo_import 的 SQL 准备语句是什么

python - PostgreSQL 从文件中复制导致空表