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

将 PostgreSQL 数据库作为 AWS DMS 源

您可以使用 AWS DMS 从一个或多个 PostgreSQL 数据库中迁移数据。将 PostgreSQL 数据库作为源时,可以将数据迁移到另一个 PostgreSQL 数据库或其他受支持的数据库。AWS DMS 支持将 PostgreSQL 9.4 版及更高版本的数据库作为以下数据库的源:本地数据库、EC2 实例上的数据库、Amazon RDS 数据库实例上的数据库以及兼容 PostgreSQL 的 Amazon Aurora 数据库实例上的数据库。

注意

PostgreSQL 版本 10.x 及更高版本包含对以前的版本中的函数名称和文件夹名称的大量更改。如果您要使用 PostgreSQL 版本 10.x 或更高版本作为 AWS DMS 的源,请参阅将 PostgreSQL 版本 10.x 及更高版本用作 AWS DMS 的源以了解有关准备作为 AWS DMS 源的数据库的信息。

您可以使用 SSL 加密 PostgreSQL 终端节点与复制实例之间的连接。有关将 SSL 用于 PostgreSQL 终端节点的更多信息,请参阅将 SSL 与 AWS Database Migration Service 配合使用

对于从 PostgreSQL 数据库到 AWS 上的 PostgreSQL 数据库的同构迁移,会出现以下情况:

  • 源上的 JSONB 列迁移到目标上的 JSONB 列。

  • JSON 列作为目标上的 JSON 列迁移。

  • HSTORE 列作为目标上的 HSTORE 列迁移。

对于将 PostgreSQL 作为源并将其他数据库引擎作为目标的异构迁移,情况有所不同。在这种情况下,JSONB、JSON 和 HSTORE 列将转换为 AWS DMS 中间类型的 NCLOB,然后转换为目标上的对应 NCLOB 列类型。这种情况下,AWS DMS 将 JSONB 数据视为 LOB 列。在阶段的完全加载阶段,目标列必须可为 null。

AWS DMS 对具有主键的 PostgreSQL 表支持更改数据捕获 (CDC)。如果某个表没有主键,提前写入日志 (WAL) 将不包含数据库行的前映像并且 AWS DMS 无法更新该表。

当数据库实例配置为使用逻辑复制时,AWS DMS 支持在 Amazon RDS PostgreSQL 数据库上执行 CDC。Amazon RDS 支持逻辑复制 PostgreSQL 数据库实例版本 9.4.9 及更高版本,以及 9.5.4 及更高版本。Amazon RDS 还支持逻辑复制兼容 PostgreSQL 10.6 的 Amazon Aurora 数据库实例版本 2.2.0 和 2.2.1。

有关使用 PostgreSQL 数据库和 AWS DMS 的其他详细信息,请参阅以下章节。

使用 AWS DMS 从 PostgreSQL 迁移到 PostgreSQL

对于异构迁移,当您从 PostgreSQL 之外的数据库引擎迁移到 PostgreSQL 数据库时,AWS DMS 通常会是可以利用的最佳迁移工具。但是,对于同构迁移,当您从 PostgreSQL 数据库迁移到 PostgreSQL 数据库时,本机工具效率更高。

我们建议您在以下条件下使用本机 PostgreSQL 数据库迁移工具(例如 pg_dump):

  • 您有一个从源 PostgreSQL 数据库向目标 PostgreSQL 数据库的同构迁移。

  • 您正在迁移整个数据库。

  • 利用这些本机工具,可以在迁移您的数据时最大程度地减少停机时间。

pg_dump 实用程序使用 COPY 命令创建 PostgreSQL 数据库的架构和数据转储。pg_dump 生成的转储脚本将数据加载到一个同名的数据库中,然后重新创建表、索引和外键。您可以使用 pg_restore 命令和 -d 参数将数据恢复到具有不同的名称的数据库。

有关将 PostgreSQL 数据库导入 Amazon RDS for PostgreSQL 或 Amazon Aurora (PostgreSQL) 的更多信息,请参阅 https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide//PostgreSQL.Procedural.Importing.html

使用 DMS 将数据从 PostgreSQL 迁移到 PostgreSQL

例如,AWS DMS 可以将数据从本地的源 PostgreSQL 数据库迁移到目标 Amazon RDS for PostgreSQL 或 Amazon Aurora (PostgreSQL) 实例。核心或基本 PostgreSQL 数据类型通常可以成功迁移。

源数据库上支持但目标数据库上不支持的数据类型可能无法成功迁移。如果数据类型未知,AWS DMS 会将一些数据类型作为字符串进行流式处理。对于某些数据类型(例如 XML 和 JSON),如果文件较小则可以成功迁移,但如果是较大的文档,迁移会失败。

下表显示了源 PostgreSQL 数据类型以及是否可以成功迁移这些数据类型:

数据类型 成功迁移 将部分迁移 不迁移 注释
INTEGER X
SMALLINT X
BIGINT X
NUMERIC/DECIMAL(p,s) X 0<p<39 且 0<s 时
NUMERIC/DECIMAL X p>38 或 p=s=0
REAL X
DOUBLE X
SMALLSERIAL X
SERIAL X
BIGSERIAL X
MONEY X
CHAR X 未指定精度
CHAR (n) X
VARCHAR X 未指定精度
VARCHAR (n) X
TEXT X
BYTEA X
TIMESTAMP X
TIMESTAMP(Z) X
DATE X
TIME X
TIME (z) X
INTERVAL X
BOOLEAN X
ENUM X
CIDR X
INET X
MACADDR X
TSVECTOR X
TSQUERY X
XML X
POINT X
LINE X
LSEG X
BOX X
路径 X
POLYGON X
CIRCLE X
JSON X
ARRAY X
COMPOSITE X
RANGE X

将 PostgreSQL 数据库作为 AWS DMS 源的先决条件

要将 PostgreSQL 数据库作为 AWS DMS 源,请执行以下操作:

  • 使用 PostgreSQL 数据库版本 9.4.x 或更高版本。

  • 向为 PostgreSQL 源数据库指定的用户账户授予超级用户权限。

  • 将 AWS DMS 复制服务器的 IP 地址添加到 pg_hba.conf 配置文件中。

  • postgresql.conf 配置文件中设置以下参数和值:

    • Set wal_level = logical

    • max_replication_slots 设置为一个大于 1 的值。

      max_replication_slots 值应根据您需要运行的任务数进行设置。例如,要运行五个任务,您需要设置至少五个时隙。在任务启动时时隙立即打开,即使任务不再运行仍保持打开。您需要手动删除打开的时隙。

    • max_wal_senders 设置为一个大于 1 的值。

      max_wal_senders 参数用于设置可以运行的并发任务数。

    • Set wal_sender_timeout =0

      wal_sender_timeout 参数会终止处于不活动状态的时间超过指定毫秒数的复制连接。默认值为 60 秒,但我们建议您将该参数设置为零,这样会禁用超时机制。

  • PostgreSQL 版本 9.6 和更高版本中的参数 idle_in_transaction_session_timeout 使您能够导致空闲事务超时并失败。一些 AWS DMS 事务在被 AWS DMS 引擎再次使用之前会空闲一段时间。当您使用 AWS DMS 时,请勿结束空闲事务。

将 PostgreSQL 数据库作为 AWS DMS 源时的安全要求

使用 PostgreSQL 作为源的唯一安全要求是,指定的用户账户必须是 PostgreSQL 数据库中的注册用户。

将 PostgreSQL 数据库作为 AWS DMS 源的限制

将 PostgreSQL 用作 AWS DMS 的源时,以下限制适用:

  • 捕获的表必须具有一个主键。如果表没有主键,AWS DMS 将忽略该表的 DELETE 和 UPDATE 记录操作。

  • 不支持包含时区类型列的时间戳。

  • AWS DMS 忽略尝试更新主键段的操作。在这些情况下,目标会将更新标识为未更新任何行的更新。但是,由于更新 PostgreSQL 中的主键的结果是不可预测的,不会将任何记录写入异常表。

  • AWS DMS 不支持 Start Process Changes from Timestamp 运行选项。

  • AWS DMS 在 Amazon RDS for PostgreSQL 上支持完全加载和更改处理。有关如何准备 PostgreSQL 数据库实例以及将其设置为使用 CDC 的信息,请参阅设置将 Amazon RDS PostgreSQL 数据库实例作为源

  • 复制多个同名但名称具有不同大小写的表(例如,table1、TABLE1 和 Table1)会导致无法预测的行为。因此,AWS DMS 不支持此类复制。

  • 在大多数情况下,AWS DMS 支持表的 CREATE、ALTER 和 DROP DDL 语句的更改处理。如果表保存在内部函数、过程正文块或其他嵌套结构中,则 AWS DMS 不支持此更改处理。

    例如,不捕获以下更改:

    CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void LANGUAGE plpgsql AS $$ BEGIN create table attu.distributors1(did serial PRIMARY KEY,name varchar(40) NOT NULL); END; $$;
  • AWS DMS 不支持 TRUNCATE 操作的更改处理。

  • OID LOB 数据类型不会迁移到目标。

  • 如果您的源是本地或 Amazon EC2 实例上的 PostgreSQL 数据库,请确保将 test_decoding 输出插件安装到源终端节点上。您可以在 Postgres contrib 包中找到此插件。有关测试解码插件的更多信息,请参阅 PostgreSQL 文档

  • AWS DMS 不支持更改处理以设置列默认值(在 ALTER TABLE 语句中使用 ALTER COLUMN SET DEFAULT 子句)。

  • AWS DMS 不支持更改处理以设置列的可为 null 性(在 ALTER TABLE 语句中使用 ALTER COLUMN [SET|DROP] NOT NULL 子句)。

  • AWS DMS 不支持复制分区表。检测到分区表时,将显示以下内容:

    • 终端节点报告列出父表和子表。

    • AWS DMS 在目标上创建常规表,这些表具有与选定表相同的属性。

    • 如果源数据库中的父表具有与子表相同的主键值,则会产生“重复的键”错误。

注意

要将分区表从 PostgreSQL 源复制到 PostgreSQL 目标,您必须在目标上手动创建父表和子表。然后,您可以定义单独的任务来向这些表进行复制。在这种情况下,您可以将任务配置设置为 Truncate before loading

注意

PostgreSQL NUMERIC 数据类型不是固定大小。当传输的数据属于 NUMERIC 数据类型,但没有精度和小数位数时,默认情况下,DMS 使用 NUMERIC(28,6)(精度为 28,小数位数为 6)。例如,源中的值 0.611111104488373 在 PostgreSQL 目标中将转换为 0.611111。

设置将 Amazon RDS PostgreSQL 数据库实例作为源

您可以将 Amazon RDS for PostgreSQL 数据库实例或只读副本用作 AWS DMS 的源。数据库实例可用于完全加载和 CDC (持续复制);只读副本只能用于完全加载任务,而不能用于 CDC。

您可以将 PostgreSQL 数据库实例的 AWS 主用户账户作为 AWS DMS 的 PostgreSQL 源终端节点的用户账户。主用户账户具有所需角色,允许它设置更改数据捕获 (CDC)。如果您使用主用户账户之外的账户,该账户必须具有 rds_superuser 角色和 rds_replication 角色。rds_replication 角色可授予管理逻辑槽并使用逻辑槽流式处理数据的权限。

如果您没有为数据库实例使用主用户账户,则必须从主用户账户为您要使用的账户创建多个对象。有关创建所需对象的信息,请参阅在不使用主用户账户的情况下迁移 Amazon RDS for PostgreSQL 数据库

将 CDC 用于 RDS 的 PostgreSQL 数据库实例

在 Amazon RDS PostgreSQL 数据库实例的数据库迁移期间,您可以使用 PostgreSQL 的本机逻辑复制功能启用 CDC。这种方法可减少停机时间,并确保目标数据库与源 PostgreSQL 数据库同步。Amazon RDS 支持 PostgreSQL 数据库实例版本 9.4.9 和更高版本,以及 9.5.4 和更高版本的逻辑复制。

注意

Amazon RDS for PostgreSQL 只读副本不能用于 CDC(持续复制)。

要为 RDS PostgreSQL 数据库实例启用逻辑复制,必须执行以下操作:

  • 通常,为 PostgreSQL 数据库实例使用 AWS 主用户账户作为 PostgreSQL 源终端节点的用户账户。主用户账户具有允许它设置 CDC 所需的角色。如果您使用主用户账户之外的账户,您必须从要使用的账户的主账户创建多个对象。有关更多信息,请参阅 在不使用主用户账户的情况下迁移 Amazon RDS for PostgreSQL 数据库

  • 在数据库参数组中将 rds.logical_replication 参数设置为 1。这是一个静态参数,该参数要求重启数据库实例才能生效。在应用该参数期间,AWS DMS 设置 wal_levelmax_wal_sendersmax_replication_slotsmax_connections 参数。这些参数更改可能会增加 WAL 生成,因此,您只应在使用逻辑槽时设置 rds.logical_replication 参数。

  • 最佳做法是将 wal_sender_timeout 参数设置为 0。将该参数设置为 0 可防止 PostgreSQL 终止处于不活动状态超过指定超时时间的复制连接。当 AWS DMS 迁移数据时,复制连接所需的持续时间超过指定的超时时间。

在不使用主用户账户的情况下迁移 Amazon RDS for PostgreSQL 数据库

在某些情况下,您可能不会将主用户账户用于将用作源的 Amazon RDS PostgreSQL 数据库实例。在这些情况下,您需要创建多个对象来捕获数据定义语言 (DDL) 事件。您可以在主用户账户之外的账户中创建这些对象,然后在主用户账户中创建触发器。

注意

如果在源终端节点上将 captureDDL 参数设置为 N,您不需要在源数据库上创建以下表和触发器。

使用以下过程创建这些对象。在该过程中,主账户以外的用户账户称为 NoPriv 账户。

创建对象

  1. 选择要在其中创建对象的架构。默认架构为 public。确保架构存在并且可由 NoPriv 账户访问。

  2. 使用 NoPriv 账户登录到 PostgreSQL 数据库实例。

  3. 运行以下命令以创建表 awsdms_ddl_audit,并将以下代码中的 <objects_schema> 替换为要使用的架构名称。

    create table <objects_schema>.awsdms_ddl_audit ( c_key bigserial primary key, c_time timestamp, -- Informational c_user varchar(64), -- Informational: current_user c_txn varchar(16), -- Informational: current transaction c_tag varchar(24), -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE' c_oid integer, -- For future use - TG_OBJECTID c_name varchar(64), -- For future use - TG_OBJECTNAME c_schema varchar(64), -- For future use - TG_SCHEMANAME. For now - holds current_schema c_ddlqry text -- The DDL query associated with the current DDL event )
  4. 运行以下命令以创建函数 awsdms_intercept_ddl,并将以下代码中的 <objects_schema> 替换为要使用的架构名称。

    CREATE OR REPLACE FUNCTION <objects_schema>.awsdms_intercept_ddl() RETURNS event_trigger LANGUAGE plpgsql SECURITY DEFINER AS $$ declare _qry text; BEGIN if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE') then SELECT current_query() into _qry; insert into <objects_schema>.awsdms_ddl_audit values ( default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry ); delete from <objects_schema>.awsdms_ddl_audit; end if; END; $$;
  5. 注销 NoPriv 账户并使用分配了 rds_superuser 角色的账户登录。

  6. 运行以下命令以创建事件触发器 awsdms_intercept_ddl

    CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE <objects_schema>.awsdms_intercept_ddl();

在完成前面的过程后,可以使用 NoPriv 账户创建 AWS DMS 源终端节点。

从 PostgreSQL 源数据库中删除 AWS DMS 项目

要捕获 DDL 事件,在开始执行迁移任务时,AWS DMS 在 PostgreSQL 数据库中创建各种不同的项目。完成任务后,您可能需要删除这些项目。要删除项目,请发布以下语句 (按显示顺序),{AmazonRDSMigration} 是在其中创建项目的架构:

drop event trigger awsdms_intercept_ddl;

事件触发器不属于特定架构。

drop function {AmazonRDSMigration}.awsdms_intercept_ddl() drop table {AmazonRDSMigration}.awsdms_ddl_audit drop schema {AmazonRDSMigration}

注意

在删除架构时应尤为谨慎。请勿删除正在使用的架构,特别是非公有的操作架构。

将 PostgreSQL 数据库作为 AWS DMS 源时的额外配置设置

在从 PostgreSQL 数据库迁移数据时,您可以使用两种方法来添加额外配置设置:

  • 您可以将值添加到额外连接属性来捕获 DDL 事件,以及指定在其中创建操作 DDL 数据库项目的架构。有关更多信息,请参阅 将 PostgreSQL 作为 AWS DMS 源时的额外连接属性

  • 您可以覆盖连接字符串参数。如果您需要执行以下任一操作,请选择该选项:

    • 指定内部 AWS DMS 参数。此类参数很少需要,因此不在用户界面中公开。

    • 为特定数据库客户端指定传递 (passthru) 值。AWS DMS 在传递给数据库客户端的连接字符串中包括传递参数。

将 PostgreSQL 版本 10.x 及更高版本用作 AWS DMS 的源

PostgreSQL 版本 10.x 及更高版本数据库包含对以前的 PostgreSQL 版本中的函数名称和文件夹名称的大量更改。这些更改使某些迁移操作无法向后兼容。

由于大多数名称更改是表面的,因此,AWS DMS 已创建让 AWS DMS 与 PostgreSQL 版本 10.x 及更高版本结合使用的包装函数。包装函数的优先级高于 pg_catalog 中的函数。此外,我们确保了现有架构的架构可见性不会更改,从而不会覆盖任何其他系统目录函数 (如用户定义的函数)。

要在执行任何迁移任务前使用这些包装函数,请对源 PostgreSQL 数据库运行以下 SQL 代码。使用用于目标数据库的同一 AWS DMS 用户账户。

BEGIN; CREATE SCHEMA IF NOT EXISTS fnRenames; CREATE OR REPLACE FUNCTION fnRenames.pg_switch_xlog() RETURNS pg_lsn AS $$ SELECT pg_switch_wal(); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_xlog_replay_pause() RETURNS VOID AS $$ SELECT pg_wal_replay_pause(); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_xlog_replay_resume() RETURNS VOID AS $$ SELECT pg_wal_replay_resume(); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_current_xlog_location() RETURNS pg_lsn AS $$ SELECT pg_current_wal_lsn(); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_is_xlog_replay_paused() RETURNS boolean AS $$ SELECT pg_is_wal_replay_paused(); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_xlogfile_name(lsn pg_lsn) RETURNS TEXT AS $$ SELECT pg_walfile_name(lsn); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_last_xlog_replay_location() RETURNS pg_lsn AS $$ SELECT pg_last_wal_replay_lsn(); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_last_xlog_receive_location() RETURNS pg_lsn AS $$ SELECT pg_last_wal_receive_lsn(); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_current_xlog_flush_location() RETURNS pg_lsn AS $$ SELECT pg_current_wal_flush_lsn(); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_current_xlog_insert_location() RETURNS pg_lsn AS $$ SELECT pg_current_wal_insert_lsn(); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_xlog_location_diff(lsn1 pg_lsn, lsn2 pg_lsn) RETURNS NUMERIC AS $$ SELECT pg_wal_lsn_diff(lsn1, lsn2); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_xlogfile_name_offset(lsn pg_lsn, OUT TEXT, OUT INTEGER) AS $$ SELECT pg_walfile_name_offset(lsn); $$ LANGUAGE SQL; CREATE OR REPLACE FUNCTION fnRenames.pg_create_logical_replication_slot(slot_name name, plugin name, temporary BOOLEAN DEFAULT FALSE, OUT slot_name name, OUT xlog_position pg_lsn) RETURNS RECORD AS $$ SELECT slot_name::NAME, lsn::pg_lsn FROM pg_catalog.pg_create_logical_replication_slot(slot_name, plugin, temporary); $$ LANGUAGE SQL; ALTER USER <user name> SET search_path = fnRenames, pg_catalog, "$user", public; -- DROP SCHEMA fnRenames CASCADE; -- ALTER USER PG_User SET search_path TO DEFAULT; COMMIT;

注意

如果您未在源 PostgreSQL 10.x 数据库上调用此准备代码,则会出现如下所示的错误。

2018-10-29T02:57:50 [SOURCE_CAPTURE ]E: RetCode: SQL_ERROR SqlState: 42703 NativeError: 1 Message: ERROR: column &quot;xlog_position&quot; does not exist;, No query has been executed with that handle [1022502] (ar_odbc_stmt.c:3647)

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

您可以使用额外的连接属性配置 PostgreSQL 源。在创建源终端节点时,您可以指定这些设置。如果您具有多个连接属性设置,请用分号将它们彼此分开,并且不需要额外的空格。

下表显示了将 PostgreSQL 用作 AWS DMS 源时可以使用的额外连接属性:

名称 描述

captureDDL

为捕获 DDL 事件,在任务开始时,AWS DMS 在 PostgreSQL 数据库中创建各种项目。稍后可以删除这些项目,如从 PostgreSQL 源数据库中删除 AWS DMS 项目中所述。

如果此值设置为 N,您无需在源数据库上创建表或触发器。有关更多信息,请参阅 在不使用主用户账户的情况下迁移 Amazon RDS for PostgreSQL 数据库

捕获流式处理的 DDL 事件。

默认值:Y

有效值:Y/N

示例:captureDDLs=Y;

ddlArtifactsSchema

在其中创建操作 DDL 数据库项目的架构。

默认值:public

有效值:String

示例:ddlArtifactsSchema=xyzddlschema;

failTasksOnLobTruncation

在设置为 true 时,如果 LOB 列的实际大小大于指定的 LobMaxSize,则此值将导致任务失败。

如果任务设置为“受限 LOB 模式”并且该选项设置为 true,任务将失败,而不是截断 LOB 数据。

默认值:false

有效值:布尔值

示例:failTasksOnLobTruncation=true;

executeTimeout

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

示例:executeTimeout=100;

PostgreSQL 的源数据类型

下表列出了使用 AWS DMS 时支持的 PostgreSQL 源数据类型以及与 AWS DMS 数据类型的默认映射。

有关如何查看目标中映射的数据类型的信息,请参阅有关所使用的目标终端节点的部分。

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

PostgreSQL 数据类型

AWS DMS 数据类型

INTEGER

INT4

SMALLINT

INT2

BIGINT

INT8

NUMERIC (p,s)

如果精度介于 0 和 38 之间,则使用 NUMERIC。

如果精度为 39 或更大的值,则使用 STRING。

DECIMAL(P,S)

如果精度介于 0 和 38 之间,则使用 NUMERIC。

如果精度为 39 或更大的值,则使用 STRING。

REAL

REAL4

DOUBLE

REAL8

SMALLSERIAL

INT2

SERIAL

INT4

BIGSERIAL

INT8

MONEY

NUMERIC(38,4)

MONEY 数据类型将映射到 SQL Server 中的 FLOAT。

CHAR

WSTRING (1)

CHAR(N)

WSTRING (n)

VARCHAR(N)

WSTRING (n)

TEXT

NCLOB

BYTEA

BLOB

TIMESTAMP

TIMESTAMP

TIMESTAMP (z)

TIMESTAMP

TIMESTAMP(带时区)

不支持

DATE

DATE

TIME

TIME

TIME (z)

TIME

INTERVAL

STRING (128)—1 YEAR、2 MONTHS、3 DAYS、4 HOURS、5 MINUTES、6 SECONDS

BOOLEAN

CHAR (5) false 或 true

ENUM

STRING (64)

CIDR

STRING (50)

INET

STRING (50)

MACADDR

STRING (18)

BIT (n)

STRING (n)

BIT VARYING (n)

STRING (n)

UUID

STRING

TSVECTOR

CLOB

TSQUERY

CLOB

XML

CLOB

POINT

STRING (255) "(x,y)"

LINE

STRING (255) "(x,y,z)"

LSEG

STRING (255) "((x1,y1),(x2,y2))"

BOX

STRING (255) "((x1,y1),(x2,y2))"

路径

CLOB "((x1,y1),(xn,yn))"

POLYGON

CLOB "((x1,y1),(xn,yn))"

CIRCLE

STRING (255) "(x,y),r"

JSON

NCLOB

JSONB

NCLOB

ARRAY

NCLOB

COMPOSITE

NCLOB

HSTORE

NCLOB

INT4RANGE

STRING (255)

INT8RANGE

STRING (255)

NUMRANGE

STRING (255)

STRRANGE

STRING (255)

PostgreSQL 列大小将影响 PostgreSQL LOB 数据类型到 AWS DMS 数据类型的转换。为此,请对以下 AWS DMS 数据类型执行下列步骤:

  • BLOB – 在创建任务时,将 Limit LOB size to (将 LOB 大小限制为) 设置为 Maximum LOB size (KB) (最大 LOB 大小 (KB)) 值。

  • CLOB – 复制将每个字符作为 UTF8 字符处理。因此,找到列中最长字符文本的长度(此处显示为 max_num_chars_text)并使用它来指定 Limit LOB size to (将 LOB 大小限制为) 的值。如果数据包含 4 字节字符,请乘以 2 以指定 Limit LOB size to (将 LOB 大小限制为) 值(以字节为单位)。在此示例中,Limit LOB size to (将 LOB 大小限制为) 等于 max_num_chars_text 乘以 2。

  • NCLOB – 复制将每个字符作为双字节字符处理。因此,找到列中最长字符文本的长度 (max_num_chars_text) 并乘以 2 以指定 Limit LOB size to (将 LOB 大小限制为) 的值。在此示例中,Limit LOB size to (将 LOB 大小限制为) 等于 max_num_chars_text 乘以 2。如果数据包含 4 字节字符,请再次乘以 2。在此示例中,Limit LOB size to (将 LOB 大小限制为) 等于 max_num_chars_text 乘以 4。