我有两个序列:
sequence_a
sequence_b
它们用于生成
的主键table_a
table_b
我需要重新启动sequence_b,以便它的nextval()与sequence_a的nextval()相同。
我似乎无法在SQL中完全执行此操作;我试过的一切都失败了没有ALTER SEQUENCE
的排列会接受lastval(),没有为此会话定义currval()以及其他一些问题。
有没有人知道我该怎么做?我可以手动完成,但这不适合我的需要。这是数据库迁移的一部分,其中来自A的记录被克隆到B中。
序列最终会发散,所以如果sequence_b的数字高于sequence_a,那么我的需求是可以接受的;我只需要确保sequence_b以高于最高sequence_a id的某个数字开头。
答案 0 :(得分:3)
你在这里有几个选择。最简单的可能是使用setval
而不是ALTER SEQUENCE
,因为您只关心b
是等于还是更高:
SELECT setval('sequence_b', nextval('sequence_a'));