我最近使用AWS Migration Service将自托管的Postgres数据库迁移到AWS RDS。
Postgres版本:10.6
我注意到我所有的主键都不再设置为“序列”,并且当我尝试手动添加序列时,它从1开始而不是继续进行已设置的计数。
我在数据库中使用Rails,因此我的SQL技能很低。我通常可以找到解决插入和更新问题的方法,但这不是我有很多经验的领域。
我的问题分为两部分:
答案 0 :(得分:1)
除非您错过了什么,并且迁移可以再次进行处理(使用不同的参数?我从未使用过AWS Migration Service,但我认为它应该保留列的serial
-iness ...),您会我也需要重新创建序列。
大约一年前,我遇到过类似情况,并写了this answer on SO。
这是要点:
CREATE SEQUENCE foo_a_seq OWNED BY foo.a;
SELECT setval('foo_a_seq', coalesce(max(a), 0)) FROM foo;
ALTER TABLE foo ALTER COLUMN a SET DEFAULT nextval('foo_a_seq');
这将创建一个序列foo_a_seq
,其nextval
比max
中的foo.a
值高一个(如果没有{ {1}}条记录。
我还继续设置了1
以便快速应用于所有需要的表/列:
foo
像这样使用它:
Function
答案 1 :(得分:1)
@a_horse_with_no_name指示我正确的方向并与AWS聊天后,至少在使用AWS Database Migration Service(DMS)的情况下,我可以回答自己的问题。
问题是,DMS仅关注数据本身,而不关注模式(在我看来,这是主要的疏忽,特别是如果您使用相同的数据库技术,但这是另一个问题)。 因此,架构本身不会迁移。该文档并没有真正弄清楚这一点。
要解决此问题:
我尚未测试的是如何处理我正在迁移实时数据库的事实。因此,完成迁移后,序列在目标数据库上可能已过期。我相信我稍后可以进入SCT并仅迁移序列,但我尚未对此进行测试。