

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

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

可以使用 PostgreSQL 数据库作为 AWS DMS中同构数据迁移的迁移目标。

AWS DMS 需要一定的权限才能将数据迁移到您的目标 Amazon RDS for PostgreSQL 数据库或亚马逊 Aurora PostgreSQL 数据库。可使用以下脚本，在 PostgreSQL 目标数据库中创建具所需权限的数据库用户。

```
CREATE USER your_user WITH LOGIN PASSWORD 'your_password';
GRANT USAGE ON SCHEMA schema_name TO your_user;
GRANT CONNECT ON DATABASE db_name to your_user;
GRANT CREATE ON DATABASE db_name TO your_user;
GRANT CREATE ON SCHEMA schema_name TO your_user;
GRANT UPDATE, INSERT, SELECT, DELETE, TRUNCATE ON ALL TABLES IN SCHEMA schema_name TO your_user;
            #For "Full load and change data capture (CDC)" and "Change data capture (CDC)" data migrations, setting up logical replication requires rds_superuser privileges
GRANT rds_superuser TO your_user;
```

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

要为 RDS for PostgreSQL 目标开启逻辑复制，请将数据库参数组中的 `rds.logical_replication` 参数设置为 1。此静态参数要求重启数据库实例或数据库集群才能生效。有些参数是静态的，只能在服务器启动时进行设置。 AWS DMS 在重新启动服务器之前，会忽略其在数据库参数组中的条目的更改。

PostgreSQL 使用触发器实现外键约束。在满载阶段，每次 AWS DMS 加载一个表。我们建议您在完全加载期间，关闭目标数据库上的外键约束。为此，请使用以下方法之一：
+ 临时关闭实例的所有触发器，并完成完全加载。
+ 在 PostgreSQL 中更改 `session_replication_role` 参数的值。

  在任何给定时间，触发器可能处于以下状态之一：`origin`、`replica`、`always` 或 `disabled`。如果将 `session_replication_role` 参数设置为 `replica`，那么只有处于 `replica` 状态的触发器处于活动状态。否则，触发器保持非活动状态。

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

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