使用 AWS DMS for Postgres 到 Postgres 数据迁移时如何修复“列 "xlog_position" 不存在”错误

How to fix `column "xlog_position" does not exist` error when using AWS DMS for Postgres to Postgres data migration

我正在尝试使用 AWS DMS 迁移和同步 PostgreSQL 数据库,但出现以下错误。

Last Error Task error notification received from subtask 0, thread 0 [reptask/replicationtask.c:2673] [1020487] 
RetCode: "SQL_ERROR SqlState: 42703 NativeError: 1 
Message: ERROR: column "xlog_position" does not exist; No query has been executed with that handle; RetCode: SQL_ERROR SqlState: 42P01 NativeError: 1 
Message: ERROR: relation "pglogical.replication_set" does not exist; No query has been executed with that handle; RetCode: SQL_ERROR SqlState: 42703 NativeError: 1 Message: ERROR: column "xlog_position" does not exist; No query has been executed with that handle; 
Could not find any supported plugins available on source; Could not resolve default plugin; Could not assign a postgres plugin to use for replication; Failure in setting Postgres CDC agent control structure; Error executing command; Stream component failed at subtask 0, component st_0_JX7ONUUGB4A2AR2VQ4FMEZ7PFU ; Stream component 'st_0_JX7ONUUGB4A2AR2VQ4FMEZ7PFU' terminated [reptask/replicationtask.c:2680] [1020487] Stop Reason FATAL_ERROR Error Level FATAL

我使用两个 PostgreSQL 实例作为源和目标。我已经测试并验证了复制实例可以访问这两个数据库实例。目标实例用户具有对数据库的完全访问权限。我是否需要安装任何插件或进行其他配置才能使此迁移设置正常运行?

为 Amazon RDS for PostgreSQL 数据库实例启用逻辑解码

  1. 用户帐户需要rds_superuser角色才能启用逻辑 复制。用户帐户还需要 rds_replication 角色 授予管理逻辑槽和使用流数据的权限 逻辑槽。

  2. 将 rds.logical_replication 静态参数设置为 1。作为 应用此参数,我们还设置了参数 wal_levelmax_wal_sendersmax_replication_slotsmax_connections。这些 参数更改会增加 WAL 生成,因此您应该只设置 使用逻辑时的 rds.logical_replication 参数 插槽.

  3. 重启静态数据库实例rds.logical_replication 参数生效。

  4. 按照下一节中的说明创建逻辑复制槽。 此过程需要您指定一个解码插件。现在 我们支持附带的 test_decoding 输出插件 PostgreSQL.

最后一项可以使用以下命令完成:

SELECT * FROM pg_create_logical_replication_slot('test_slot', 'test_decoding');

参考:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication

我按照上面提到的步骤设法解决了这个问题 https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html.

问题是因为我使用的是 DMS 引擎 v3.1.4,它需要一些额外的配置才能启动复制过程。这些说明可在 https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.PostgreSQL.html#CHAP_Source.PostgreSQL.v10

中找到

如果您遇到此问题,请仔细检查 DMS 复制引擎版本。这可以在 资源管理 中的 复制实例 下查看。