如标题所述,在数据导入后,我应该将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
1条答案
按热度按时间c9x0cxw01#
https://www.postgresql.org/docs/current/sql-altersequence.html上的文件说
[...]子句
RESTART WITH restart
更改序列的当前值。这类似于使用is_called = false
调用setval
function:指定的值将由nextval
的 next 调用返回。因此,您需要
COALESCE((SELECT MAX(id) FROM my_table), 0) ***+ 1***
,否则下一个nextval()
调用将返回一个表中已经存在的值。