使用 AWS DMS 迁移后 PostgreSQL 主键序列丢失

标签 postgresql amazon-rds

我最近使用 AWS Migration Service 将一个自托管的 Postgres 数据库迁移到 AWS RDS。
Postgres 版本:10.6

我注意到我所有的主键不再设置为“序列”,当我尝试手动添加序列时,它从 1 开始,而不是继续已经设置的计数。

我使用 Rails 和数据库,所以我的 sql 技能很低。我通常可以找到解决插入和更新的方法,但这不是我经验丰富的领域。

我的问题有两部分:

  1. 如何修复单个表?在继续之前,我想了解并测试我在做什么。
  2. 有没有一种方法可以将此修复应用到我拥有的每个表,而无需手动修改每个表?

最佳答案

在@a_horse_with_no_name 向我指出正确的方向并与 AWS 交谈后,我能够回答我自己的问题,至少如果您使用的是 AWS Database Migration Service (DMS)。

问题是,DMS 只关注数据本身,而不是真正的架构(在我看来,这似乎是一个重大疏忽,尤其是如果您使用相同的数据库技术,但这是另一个问题)。 因此架构本身不会迁移。文档并没有真正说明这一点。

解决这个问题:

  1. 停止(如果它仍然存在)现有的 AWS DMS 迁移
  2. 删除现有的迁移数据库,并创建一个新的空模式以供使用
  3. 按照此处的步骤操作 https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Installing.html安装和设置 Amazon Schema Conversation Tool (SCT)
  4. 连接到两个数据库后,按照此处的步骤操作 https://docs.aws.amazon.com/SchemaConversionTool/latest/userguide/CHAP_Converting.html “转换”你的模式(我为这个数据库做了整个“公共(public)”模式以确保涵盖所有内容
  5. 创建或修改您的 AWS DMS 迁移,确保目标表准备模式 =“TRUNCATE”并禁用目标数据库上的外键。如果要修改,请确保在询问时“重新开始”而不是恢复

我尚未测试的是如何处理我正在迁移实时数据库这一事实。因此,当迁移完成时,序列在目标数据库上可能已过时。我相信我可以稍后进入 SCT 并只迁移序列,但我还没有测试过。

关于使用 AWS DMS 迁移后 PostgreSQL 主键序列丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55633029/

相关文章:

sql - 正则表达式约束拒绝 Postgresql 中明显有效的数据

sql - 仅选择符合条件的最后一组行

Python - Luigi - 复制到 Postgres

mysql - 自动增量 PK 的备用字段

node.js - Postgres 数据库无法连接,.sync() 无法解析。 Sequelize ,PostgreSQL, Node

ruby-on-rails - Ruby on Rails Postgres/Active Record 搜索优化

php - Amazon DynamoDB 是否比 Amazon RDS (php) 慢?

amazon-web-services - AWS CloudFormation - RDS 实例准备就绪后创建表吗?

amazon-web-services - 如何通过 id 获取最新的共享 AWS RDS 快照?

amazon-web-services - 定期归档AWS RDS中特定表的数据