

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

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

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

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

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

对数据库实例设置进行以下修改：
+ 禁用数据库实例备份 (将 backup\_retention 设置为 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`。<br />对于 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\_user 权限在创建数据库实例时并不授予，因此，无法使用该命令导入数据。

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