postgresql 数据导入后,我应该将序列重置为MAX(id)还是MAX(id)+1?

wztqucjr  于 2023-02-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(322)

如标题所述,在数据导入后,我应该将PG序列重置为MAX(id)还是MAX(id)+1?

-- is what SELECT MAX(id) FROM my_table or
-- SELECT MAX(id)+1 FROM my_table 

ALTER SEQUENCE my_table_id_seq RESTART WITH what;

如果选择一个表并执行SELECT MAX(id) FROM my_table,得到x,然后查看序列last_value,它显示x=MAX(id)而不是MAX(id)+1
因此,对我来说,它在本地意味着PG跟踪(并应重置为)最后一个值,即MAX(id),而不是MAX(id)+1

c9x0cxw0

c9x0cxw01#

https://www.postgresql.org/docs/current/sql-altersequence.html上的文件说
[...]子句RESTART WITH restart更改序列的当前值。这类似于使用is_called = false调用setval function:指定的值将由nextvalnext 调用返回。
因此,您需要COALESCE((SELECT MAX(id) FROM my_table), 0) ***+ 1***,否则下一个nextval()调用将返回一个表中已经存在的值。

相关问题