改变序列以同步到另一个序列

时间:2014-02-21 02:02:58

标签: postgresql

我有两个序列:

sequence_a
sequence_b

它们用于生成

的主键
table_a
table_b

我需要重新启动sequence_b,以便它的nextval()与sequ​​ence_a的nextval()相同。

我似乎无法在SQL中完全执行此操作;我试过的一切都失败了没有ALTER SEQUENCE的排列会接受lastval(),没有为此会话定义currval()以及其他一些问题。

有没有人知道我该怎么做?我可以手动完成,但这不适合我的需要。这是数据库迁移的一部分,其中来自A的记录被克隆到B中。

序列最终会发散,所以如果sequence_b的数字高于sequence_a,那么我的需求是可以接受的;我只需要确保sequence_b以高于最高sequence_a id的某个数字开头。

1 个答案:

答案 0 :(得分:3)

你在这里有几个选择。最简单的可能是使用setval而不是ALTER SEQUENCE,因为您只关心b是等于还是更高:

SELECT setval('sequence_b', nextval('sequence_a'));