

# 将数据导入 Amazon RDS 上的 PostgreSQL
<a name="PostgreSQL.Procedural.Importing"></a>

假设您要将现有的 PostgreSQL 部署移动到 Amazon RDS 中。任务的复杂性取决于数据库大小以及要传输的数据库对象类型。例如，考虑包含 GB 级别数据集以及存储过程和触发器的数据库。相比只有几个 MB 测试数据并且没有触发器或存储过程的简单数据库，此类数据库要复杂得多。

我们建议您在以下条件下使用本机 PostgreSQL 数据库迁移工具：
+ 您具有一个同类迁移，其中，您正在从一个具有与目标数据库相同的数据库引擎的数据库中迁移。
+ 您正在迁移整个数据库。
+ 利用这些本机工具，您可以在最少的停机时间下迁移您的系统。

在其他大多数情况下，使用 Amazon Database Migration Service（Amazon DMS）是最佳方法。AmazonDMS 可以在不停机的情况下迁移数据库，对于许多数据库引擎，将继续进行持续复制，直到您已准备好切换到目标数据库。您可以使用 Amazon DMS 迁移到相同的数据库引擎或其他数据库引擎。如果要迁移到与源数据库不同的数据库引擎，您可以使用 Amazon Schema Conversion Tool (Amazon SCT)。您可以使用 Amazon SCT 迁移 Amazon DMS 未迁移的架构对象。有关 Amazon DMS 的更多信息，请参阅[什么是 Amazon Database Migration Service？](https://docs.amazonaws.cn/dms/latest/userguide/Welcome.html)。

修改数据库参数组以包括以下*仅供您导入* 的设置。您应测试参数设置以查找对数据库实例最有效的设置：在导入完成后，您需要将这些参数还原为生产值。

对数据库实例设置进行以下修改：
+ 禁用数据库实例备份 (将 backup\$1retention 设置为 0)。
+ 禁用多可用区。

修改数据库参数组以包括以下设置。您只应在导入数据时使用这些设置。您应测试参数设置以查找对数据库实例最有效的设置：在导入完成后，您需要将这些参数还原为生产值。


| 参数 | 导入时的建议值 | 描述 | 
| --- | --- | --- | 
|  `maintenance_work_mem`  |  524288、1048576、2097152 或 4194304 (KB)。这些设置相当于 512 MB、1 GB、2 GB 和 4 GB。  |  此设置的只取决于您主机的大小。该参数在 CREATE INDEX 语句中使用，每个并行命令可以使用这个数量的内存。计算最佳值，这样就不会将该值设置得过高而出现内存不足的情况。  | 
|  `max_wal_size`  |  256（适用于 9.6 版本）、4096（适用于 10 及更高版本）  |  允许 WAL 在自动检查点期间增长的最大大小。增大此参数会增加崩溃恢复所需的时间。对于 PostgreSQL 9.6 及更高版本，此参数替代 `checkpoint_segments`。 对于 PostgreSQL 9.6，此值的单位为 16 MB。对于更高版本，此值单位为 1 MB。例如，在 9.6 版本中，128 表示 128 个块，每个块大小为 16 MB。在 12.4 版本中，2048 代表 2048 个块，每个块大小为 1 MB。  | 
|  `checkpoint_timeout`  |  1800  |  此设置的值可以减少 WAL 轮换的频率。  | 
|  `synchronous_commit`  |  Off  |  禁用此设置可加快写入。禁用此参数会在服务器崩溃时增加数据丢失的风险（不禁用 FSYNC）。  | 
|  `wal_buffers`  |   8192  |  该值以 8 KB 为单位。这也有助于您的 WAL 生成速度  | 
|  `autovacuum`  |  0  |  在您加载数据时禁用 PostgreSQL auto vacuum 参数，这样它就不使用资源  | 

将 `pg_dump -Fc` (压缩) 或 `pg_restore -j` (并行) 命令与这些设置结合使用。

**注意**  
PostgreSQL 命令 `pg_dumpall` 所需要的 super\$1user 权限在创建数据库实例时并不授予，因此，无法使用该命令导入数据。

**Topics**
+ [从 Amazon EC2 实例导入 PostgreSQL 数据库](PostgreSQL.Procedural.Importing.EC2.md)
+ [使用 \$1copy 命令将数据导入 PostgreSQL 数据库实例上的表](PostgreSQL.Procedural.Importing.Copy.md)
+ [将 Amazon S3 中的数据导入到 RDS for PostgreSQL 数据库实例](USER_PostgreSQL.S3Import.md)
+ [在数据库实例之间传输 PostgreSQL 数据库](PostgreSQL.TransportableDB.md)