

# 使用 Aurora PostgreSQL Limitless Database 数据加载实用程序
<a name="limitless-load.utility"></a>

Aurora 提供了一种实用程序，用于从 Aurora PostgreSQL 数据库集群或 RDS for PostgreSQL 数据库实例将数据直接加载到 Limitless Database 中。

您可以执行以下步骤来使用数据加载实用程序：

1. [先决条件](#limitless-load.prereqs)

1. [准备源数据库](#limitless-load.source)

1. [准备目标数据库](#limitless-load.destination)

1. [创建数据库凭证](#limitless-load.users)

1. 下列情况之一：
   + [使用脚本设置数据库身份验证和资源访问权限](limitless-load.script.md)（推荐）
   + [手动设置数据库身份验证和资源访问权限](limitless-load.manual.md)

1. [从 Aurora PostgreSQL 数据库集群或 RDS for PostgreSQL 数据库实例加载数据。](limitless-load.data.md)

## 限制
<a name="limitless-load.limitations"></a>

数据加载实用程序具有以下限制：
+ 不支持以下数据类型：`enum`、`ARRAY`、`BOX`、`CIRCLE`、`LINE`、`LSEG`、`PATH`、`PG_LSN`、`PG_SNAPSHOT`、`POLYGON`、`TSQUERY`、`TSVECTOR` 和 `TXID_SNAPSHOT`。
+ 加载期间，`VARBIT` 数据类型的前导零 (`0`) 将被去除。
+ 当目标表上有外键时，数据迁移失败。
+ Limitless Data Utility 对于 Amazon RDS for PostgreSQL 多可用区数据库集群支持以下源配置：
  + 主实例
    + 支持的模式：快照、snapshot\_then\_cdc
  + 副本实例
    + 支持的模式：仅限快照
      + 要求：必须启用 hot\_standby\_feedback
    + 不支持：snapshot\_then\_cdc

## 先决条件
<a name="limitless-load.prereqs"></a>

数据加载实用程序具有以下先决条件：
+ 源数据库使用 Aurora PostgreSQL 或 RDS for PostgreSQL 版本 11.x 及更高版本。
+ 源数据库与目标数据库分片组位于相同的 Amazon Web Services 账户和 Amazon Web Services 区域中。
+ 源数据库集群或数据库实例处于 `available` 状态。
+ 源数据库和 Limitless Database 上的表具有相同的表名称、列名称和列数据类型。
+ 源表和目标表的主键使用相同的列和列顺序。
+ 要运行数据加载命令，您必须有一个可以连接到无限数据库的环境。可用命令如下：
  + `rds_aurora.limitless_data_load_start`
  + `rds_aurora.limitless_data_load_cancel`
+ 对于 CDC：
  + 源数据库和目标数据库分片组必须使用相同的数据库子网组、VPC 安全组和数据库端口。这些设置用于与源数据库和数据库分片组中路由器的网络连接。
  + 您必须在源数据库上启用逻辑复制。源数据库用户必须具有读取逻辑复制的权限。

## 准备源数据库
<a name="limitless-load.source"></a>

要访问源数据库进行数据加载，您必须允许传入的网络流量进入该数据库。执行以下步骤。

**允许网络流量进入源数据库**

1. 登录到 Amazon Web Services 管理控制台 并打开 Amazon EC2 控制台（[https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/)）。

1. 导航到**安全组**页面。

1. 为源数据库集群或实例使用的安全组选择**安全组 ID**。

   例如，其安全组 ID 为 `sg-056a84f1712b77926`。

1. 在**入站规则**选项卡：

   1. 选择**编辑入站规则**。

   1. 为源数据库集群或实例添加新的入站规则：
      + 端口范围 – 源数据库的数据库端口，通常是 `5432`
      + 安全组 ID – 本例中为 `sg-056a84f1712b77926`  
![为源数据库添加入站规则。](http://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/images/limitless_self_access_inbound_rule.png)

1. 在**出站规则**选项卡：

   1. 选择**编辑出站规则**。

   1. 为源数据库集群或实例添加新的出站规则：
      + 数据库端口 – `All traffic`（包括端口 `0-65535`）
      + 安全组 ID – 本例中为 `sg-056a84f1712b77926`  
![为源数据库添加出站规则。](http://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/images/limitless_self_access_outbound_rule.png)

1. 登录到 Amazon Web Services 管理控制台并打开 Amazon VPC 控制台，网址：[https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/)。

1. 导航到**网络 ACL** 页面。

1. 添加[默认网络 ACL](https://docs.amazonaws.cn/vpc/latest/userguide/vpc-network-acls.html#default-network-acl) 中概述的默认网络 ACL 配置。

## 准备目标数据库
<a name="limitless-load.destination"></a>

按照 [创建 Aurora PostgreSQL Limitless Database 表](limitless-creating.md) 中的过程在数据库分片组中创建目标表。

目标表的架构、表名称和主键必须与源表相同。

## 创建数据库凭证
<a name="limitless-load.users"></a>

您必须在源数据库和目标数据库中创建数据库用户，然后向这些用户授予必要的权限。有关更多信息，请参阅 PostgreSQL 文档中的 [CREATE USER](https://www.postgresql.org/docs/current/sql-createuser.html) 和 [GRANT](https://www.postgresql.org/docs/current/sql-grant.html)。

### 创建源数据库凭证
<a name="limitless-load.users.source"></a>

在命令中传递源数据库用户以开始加载。该用户必须拥有从源数据库执行复制的权限。

1. 使用数据库主用户（或具有 `rds_superuser` 角色的其他用户）创建具有 `LOGIN` 权限的源数据库用户。

   ```
   CREATE USER {{source_db_username}} WITH PASSWORD '{{source_db_user_password}}';
   ```

1. 将 `rds_superuser` 角色授予您的源数据库用户。

   ```
   GRANT rds_superuser to {{source_db_username}};
   ```

1. 如果您使用的是 `full_load_and_cdc` 模式，请将 `rds_replication` 角色授予您的源数据库用户。`rds_replication` 角色可授予管理逻辑时隙和使用逻辑时隙流式处理数据的权限。

   ```
   GRANT rds_replication to {{source_db_username}};
   ```

### 创建目标数据库凭证
<a name="limitless-load.users.destination"></a>

目标数据库用户必须拥有写入数据库分片组中目标表的权限。

1. 使用数据库主用户（或具有 `rds_superuser` 角色的其他用户）创建具有 `LOGIN` 权限的目标数据库用户。

   ```
   CREATE USER {{destination_db_username}} WITH PASSWORD '{{destination_db_user_password}}';
   ```

1. 将 `rds_superuser` 角色授予您的目标数据库用户。

   ```
   GRANT rds_superuser to {{destination_db_username}};
   ```