

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 原生 PostgreSQL 客户端应用程序
<a name="native-postgre-sql-client-applications"></a>

您可以使用原生 PostgreSQL 客户端应用程序进行离线迁移，包括 [pg\_dump](https://www.postgresql.org/docs/current/app-pgdump.html)、[pg\_dumpall](https://www.postgresql.org/docs/current/app-pg-dumpall.html) 和 [pg\_restore](https://www.postgresql.org/docs/current/app-pgrestore.html)。pg\_dump 实用程序用于备份 PostgreSQL 数据库。您可以使用 pg\_dump 进行一致的备份并备份单个数据库。要备份集群中所有数据库通用的全局对象（例如角色和表空间），请使用 pg\_dumpall。我们建议您以超级用户身份运行 pg\_dump 实用程序，因为只有超级用户才能执行完整转储。pg\_dump 实用程序还提供了优化备份过程的选项，包括使用作业选项（用于并行运行转储）和在进行备份时的目录格式。有关更多信息，请参阅 PostgreSQL 文档中的 [pg\_dump](https://www.postgresql.org/docs/current/app-pgdump.html) 页面的*选项*部分。

pg\_restore 实用程序用于从 pg\_dump 创建的归档中恢复 PostgreSQL 数据库。如果您使用自定义或目录格式的 pg\_dump，可以在并行模式下运行 pg\_restore 实用程序。要提高 pg\_restore 的性能，您可以调整以下参数：
+ 设置 `shared_buffers` 为符合您的要求，并增加 `maintenance_work_mem` 以加快索引创建速度。
+ 关闭大量日志记录、autovacuum 进程守护程序和 `full_page_writes`。
+ （可选）备份和恢复架构，并使用仅限数据的转储和恢复。如果您使用此方法，可以使用 `disable-triggers` 选项来提高性能。

您可以从目标 EC2 实例运行 pg\_dump 和 pg\_restore。我们建议您使用 [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 以获得更好的速度和性能。最后，请确保您有足够的存储空间来存储备份文件。

## 架构
<a name="architecture-native-postgresql-client-apps"></a>

下图显示了使用原生 PostgreSQL 客户端应用程序将本地 PostgreSQL 数据库迁移到 AWS 云的架构。

![原生 PostgreSQL 客户端应用程序架构](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/migration-databases-postgresql-ec2/images/native-client-applications-architecture.png)


图表显示了以下工作流程：

1. 使用 pg\_dump 进行备份。

1. 创建一个 EC2 实例并在该实例上安装 PostgreSQL。

1. 将转储文件复制到 Amazon EC2。

1. 使用 pg\_restore 恢复备份文件。

## 限制
<a name="limitations-native-postgresql-client-apps"></a>

我们建议您在开始迁移之前，考虑以下有关使用原生 PostgreSQL 客户端应用程序的限制：
+ 对于较大的数据库（即大于 300GB 的数据库），转储和恢复可能很耗时。
+ 此选项要求数据库完全停机。
+ 服务器需要大量磁盘空间来进行备份，然后将备份复制到 Amazon EC2。