AWS Database Migration Service
用户指南 (版本 API Version 2016-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 PostgreSQL 数据库作为 AWS Database Migration Service 目标

您可以使用 AWS DMS,从另一个 PostgreSQL 数据库或者从其他支持的数据库之一将数据迁移到 PostgreSQL 数据库。本地、Amazon RDS、与 PostgreSQL 兼容的 Amazon Aurora 和 EC2 实例数据库支持 PostgreSQL 9.4 和更高版本。

在完全加载阶段将数据从源迁移到目标时,AWS DMS 使用逐表加载方法。无法在完全加载阶段保证表顺序。在完全加载阶段以及应用各个表的缓存事务时,表将不同步。因此,活动引用完整性约束可能会导致任务在完全加载阶段失败。

在 PostgreSQL 中,将使用触发器实施外键 (引用完整性约束)。在完全加载阶段,AWS DMS 每次加载一个表。强烈建议您在完全加载期间使用以下方法之一禁用外键约束:

  • 从实例中临时禁用所有触发器并完成完全加载。

  • 在 PostgreSQL 中使用 session_replication_role 参数。

在任何给定时间,触发器可能处于以下状态之一:originreplicaalwaysdisabled。在将 session_replication_role 参数设置为 replica 时,只有处于 replica 状态的触发器是活动触发器,并且它们在被调用时触发。否则,触发器保持非活动状态。

PostgreSQL 具有故障保护机制以防止截断表,即使设置了 session_replication_role。您可以将该机制作为禁用触发器的替代方法,以帮助完成完全加载运行。为此,请将目标表准备模式设置为 DO_NOTHING。否则,在具有外键约束时,DROP 和 TRUNCATE 操作将失败。

在 Amazon RDS 中,可以使用参数组控制该参数的设置。对于在 Amazon EC2 上运行的 PostgreSQL 实例,可以直接设置该参数。

有关将 PostgreSQL 数据库作为 AWS DMS 目标的其他详细信息,请参阅以下章节:

将 PostgreSQL 作为 AWS Database Migration Service 目标时的限制

将 PostgreSQL 数据库作为 AWS DMS 目标时的限制如下:

  • JSON 数据类型转换为本机 CLOB 数据类型。

  • 在 Oracle 向 PostgreSQL 迁移的过程中,如果 Oracle 中的一列包含 NULL 字符 (十六进制值 U+0000),AWS DMS 会将这些 NULL 字符转换为空格 (十六进制值 U+0020)。这是出于 PostgreSQL 限制的原因。

将 PostgreSQL 数据库作为 AWS Database Migration Service 目标时的安全要求

出于安全目的,用于数据迁移的用户账户,必须是您作为目标的任意 PostgreSQL 数据库中的注册用户。

将 PostgreSQL 作为 AWS DMS 目标时的额外连接属性

您可以使用额外的连接属性配置 PostgreSQL 目标。在创建目标终端节点时,您可以指定这些设置。应将多个额外连接属性设置用分号隔开。

下表列出了可用于将 PostgreSQL 配置为 AWS DMS 目标的额外连接属性:

名称 说明

maxFileSize

指定用于将数据传输到 PostgreSQL 的任何 CSV 文件的最大大小 (KB)。

默认值:32768 KB (32 MB)

有效值:1–1048576

示例:maxFileSize=512

executeTimeout

设置 PostgreSQL 实例的客户端语句超时 (以秒为单位)。默认值为 60 秒。

示例:executeTimeout=100

afterConnectScript=SET session_replication_role='replica'

添加此属性可让 AWS DMS 绕过所有外键和用户触发器。此操作会显著减少使用全负载模式时批量加载数据所需的时间。

示例:afterConnectScript=SET session_replication_role='replica'

PostgreSQL 的目标数据类型

AWS DMS 的 PostgreSQL 数据库终端节点支持大多数 PostgreSQL 数据库数据类型。下表列出了使用 AWS DMS 时支持的 PostgreSQL 数据库目标数据类型以及来自 AWS DMS 数据类型的默认映射。该表的后面列出了不受支持的数据类型。

有关 AWS DMS 数据类型的其他信息,请参阅AWS Database Migration Service 的数据类型

AWS DMS 数据类型

PostgreSQL 数据类型

BOOL

BOOL

BYTES

BYTEA

DATE

DATE

TIME

TIME

TIMESTAMP

如果小数位数介于 0 和 6 之间,请使用 TIMESTAMP。

如果小数位数介于 7 和 9 之间,请使用 VARCHAR (37)。

INT1

SMALLINT

INT2

SMALLINT

INT4

INTEGER

INT8

BIGINT

NUMERIC

DECIMAL (P,S)

REAL4

FLOAT4

REAL8

FLOAT8

STRING

如果长度介于 1 和 21845 之间,请使用 VARCHAR (以字节为单位的长度)。

如果长度介于 21846 和 2147483647 之间,请使用 VARCHAR (65535)。

UINT1

SMALLINT

UINT2

INTEGER

UINT4

BIGINT

UINT8

BIGINT

WSTRING

如果长度介于 1 和 21845 之间,请使用 VARCHAR (以字节为单位的长度)。

如果长度介于 21846 和 2147483647 之间,请使用 VARCHAR (65535)。

BCLOB

BYTEA

NCLOB

TEXT

CLOB

TEXT

注意

在从 PostgreSQL 源复制时,AWS DMS 将为所有列(带用户定义的数据类型的列除外)创建带相同数据类型的目标表。在此类情况下,在目标中创建数据类型作为“可变字符”。