

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 PostgreSQL 数据库作为同构数据迁移的来源 AWS DMS
<a name="dm-data-providers-source-postgresql"></a>

可以使用 PostgreSQL 数据库作为 AWS DMS中[同构数据迁移](data-migrations.md)的源。在此情况下，源数据提供程序可以是本地数据库、Amazon EC2 数据库或 RDS for PostgreSQL 数据库。

要运行同构数据迁移，请为您在 PostgreSQL 源数据库中 AWS DMS 指定的数据库用户授予超级用户权限。该数据库用户需要超级用户权限，才能访问源中特定于复制的函数。对于完全加载数据迁移，数据库用户需要对表具有 `SELECT` 权限才能迁移表。

可使用以下脚本，在 PostgreSQL 源数据库中创建具所需权限的数据库用户。对您迁移到的所有数据库运行`GRANT`查询 AWS。

```
CREATE USER your_user WITH LOGIN PASSWORD 'your_password';
ALTER USER your_user WITH SUPERUSER;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO your_user;
```

在前面的示例中，用您自己的信息替换每个*user input placeholder*示例。

AWS DMS 对有主键的 PostgreSQL 表支持 CDC。如果某个表没有主键，提前写入日志（WAL）将不包含数据库行的前映像。在这里，您可以使用其他配置设置，并使用表副本身份作为解决方法。但是，这种方法可能会生成额外的日志。我们建议您仅在仔细测试后才使用表副本身份作为解决方法。有关更多信息，请参阅 [将 PostgreSQL 数据库作为 DMS 源时的额外配置设置](CHAP_Source.PostgreSQL.md#CHAP_Source.PostgreSQL.Advanced)。

以下各节描述了自管理 PostgreSQL 数据库和 AWS托管 PostgreSQL 数据库的特定配置先决条件。

**Topics**
+ [使用自我管理的 PostgreSQL 数据库作为同构数据迁移的来源 AWS DMS](#dm-data-providers-source-postgresql-sm)
+ [使用 AWS托管的 PostgreSQL 数据库作为同构数据迁移的来源 AWS DMS](#dm-data-providers-source-postgresql-aws)
+ [使用与 PostgreSQL 兼容的数据库作为同构数据迁移的源的限制](#dm-data-providers-source-postgresql-limitations)

## 使用自我管理的 PostgreSQL 数据库作为同构数据迁移的来源 AWS DMS
<a name="dm-data-providers-source-postgresql-sm"></a>

本节介绍如何配置本地托管的或在 Amazon EC2 实例上托管的 PostgreSQL 数据库。

检查源 PostgreSQL 数据库的版本。请确保它 AWS DMS 支持您的源 PostgreSQL 数据库版本，如中所述。[DMS 同构数据迁移的源](CHAP_Introduction.Sources.md#CHAP_Introduction.Sources.HomogeneousDataMigrations)

同构数据迁移支持使用逻辑复制进行更改数据捕获（CDC）。要开启自管理 PostgreSQL 源数据库的逻辑复制，请在 `postgresql.conf` 配置文件中设置以下参数和值：
+ 将 `wal_level` 设置为 `logical`。
+ 将 `max_replication_slots` 设置为一个大于 1 的值。

  请根据您需要运行的任务数设置 `max_replication_slots` 值。例如，要运行五个任务，您需要设置至少五个时隙。在任务启动时时隙立即打开，即使任务不再运行仍保持打开。请务必手动删除空闲时隙。
+ 将 `max_wal_senders` 设置为一个大于 1 的值。

  `max_wal_senders` 参数用于设置可以运行的并发任务数。
+ `wal_sender_timeout` 参数会终止处于不活动状态的时间超过指定毫秒数的复制连接。默认值为 60000 毫秒（60 秒）。将此值设置为 0（零）会禁用超时机制，这是 DMS 的有效设置。

有些参数是静态的，只能在服务器启动时设置。在服务器重新启动之前，对配置文件条目所做的任何更改都将被忽略。有关更多信息，请参阅 [PostgreSQL 文档](https://www.postgresql.org/docs/current/intro-whatis.html)。

## 使用 AWS托管的 PostgreSQL 数据库作为同构数据迁移的来源 AWS DMS
<a name="dm-data-providers-source-postgresql-aws"></a>

本节介绍如何配置 Amazon RDS for PostgreSQL 数据库实例。

使用 PostgreSQL 数据库实例 AWS 的主用户账户作为 PostgreSQL 源数据提供程序的用户账户，以便在中进行同构数据迁移。 AWS DMS主用户账户具有允许它设置 CDC 所需的角色。如果使用主用户账户之外的账户，该账户必须具有 `rds_superuser` 角色和 `rds_replication` 角色。`rds_replication` 角色可授予管理逻辑时隙和使用逻辑时隙流式处理数据的权限。

可使用以下代码示例授予 `rds_superuser` 和 `rds_replication` 角色。

```
GRANT rds_superuser to your_user;
GRANT rds_replication to your_user;
```

在前面的示例中，*your\$1user*替换为数据库用户的名称。

要开启逻辑复制，请将数据库参数组中的 `rds.logical_replication` 参数设置为 1。此静态参数要求重启数据库实例才能生效。

## 使用与 PostgreSQL 兼容的数据库作为同构数据迁移的源的限制
<a name="dm-data-providers-source-postgresql-limitations"></a>

使用与 PostgreSQL 兼容的数据库作为同构数据迁移的源时，存在以下限制：
+ 用于连接到数据源的用户名具有以下限制：
  + 长度为 2 到 64 个字符。
  + 不能包含空格。
  + 可以包含以下字符：a-z、A-Z、0-9、下划线 (\$1)。
  + 必须以 a-z 或 A-Z 开头。
+ 用于连接到数据源的密码具有以下限制：
  + 长度为 1 到 128 个字符。
  + 不能包含以下任何字符：单引号 (')、双引号 (")、分号 (;) 或空格。