

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

# 使用 pglogical 从 EC2 亚马逊上的 PostgreSQL 迁移到适用于 PostgreSQL 的亚马逊 RDS
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical"></a>

*Rajesh Madiwale，Amazon Web Services*

## Summary
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-summary"></a>

**此模式概述了使用 PostgreSQL pglogical 扩展将 PostgreSQL 数据库（版本 9.5 及更高版本）从亚马逊弹性计算云（ EC2亚马逊）迁移到适用于 PostgreSQL 的亚马逊关系数据库服务（亚马逊 RDS）的步骤。**Amazon RDS 现在支持 PostgreSQL 版本 10 的 pglogical 扩展。

## 先决条件和限制
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-prereqs"></a>

**先决条件**
+ 选择正确的 Amazon RDS 实例类型。有关更多信息，请参阅 [Amazon RDS 实例类型](https://aws.amazon.com/rds/instance-types/)。
+ 确保 PostgreSQL 的源版本与目标版本相同。  
+ 在亚马逊上安装 p [**glogical 扩展并将其与 P** ostgreSQL](https://github.com/2ndQuadrant/pglogical) 集成。 EC2

**产品版本**
+ Amazon RDS 上的 PostgreSQL 版本 10 及以上版本，Amazon RDS 支持这些功能（参见 AWS 文档中的[PostgreSQL on Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts)）。这种模式是通过在 Amazon RDS 上将 PostgreSQL 9.5 迁移至 PostgreSQL 版本 10 进行测试，但它也适用于最新版 PostgreSQL on Amazon RDS。

## 架构
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-architecture"></a>

**数据迁移架构**

![\[Amazon RDS 上 PostgreSQL 的数据迁移架构\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/29af3931-48de-499f-9c4b-e10a98e4bba5/images/5f5b906f-dc1a-49a5-ae3f-3e10ae854784.png)


## 工具
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-tools"></a>
+ [https://github.com/2ndQuadrant/pglogical](https://github.com/2ndQuadrant/pglogical) 扩展
+ PostgreSQL 原生实用程序：[https://www.postgresql.org/docs/9.5/app-pgdump.html](https://www.postgresql.org/docs/9.5/app-pgdump.html) 和 [https://www.postgresql.org/docs/9.6/app-pgrestore.html](https://www.postgresql.org/docs/9.6/app-pgrestore.html)

## 操作说明
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-epics"></a>

### 使用 pglogical 扩展迁移数据
<a name="migrate-data-by-using-the-pglogical-extension"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建 Amazon RDS PostgreSQL 数据库实例。 | 在 Amazon RDS 中设置 PostgreSQL 数据库实例。有关说明，请参阅 [Amazon RDS for PostgreSQL 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html)。 | 数据库管理员 | 
| 从源 PostgreSQL 数据库获取架构转储并将其恢复至目标 PostgreSQL 数据库中。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.html) | 数据库管理员 | 
| 启用逻辑解码。 | 在 Amazon RDS 数据库参数组，将 `rds.logical_replication` 静态参数设置为 1。有关说明，请参阅 [Amazon RDS 文档](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalDecoding)。 | 数据库管理员 | 
| 在源数据库和目标数据库创建 pglogical 扩展。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical.html) | 数据库管理员 | 
| 在源 PostgreSQL 数据库上创建发布者。 | 若要创建发布者，请运行：<pre>psql -d dbname -p 5432 <<EOF<br />SELECT pglogical.create_node( node_name := 'provider1', dsn := 'host=<ec2-endpoint> port=5432 dbname=source-dbname user=source-dbuser' );<br />EOF</pre> | 数据库管理员 | 
| 创建复制集，添加表格和序列。 | 要在源 PostgreSQL 数据库上创建复制集并将表和序列添加到复制集，请运行：<pre>psql -d dbname -p 5432 <<EOF<br />SELECT pglogical.replication_set_add_all_tables('default', '{public}'::text[],synchronize_data := true);<br />EOF</pre> | 数据库管理员 | 
| 创建订阅用户。 | 若要对 PostgreSQL 数据库创建订阅用户，请运行：<pre>psql -h <rds-endpoint> -d target-dbname -U target-dbuser  <<EOF<br />SELECT pglogical.create_node(<br />    node_name := 'subscriber1',<br />    dsn := 'host=<rds-endpoint> port=5432 dbname=target-dbname password=postgres user=target-dbuser'<br />);<br />EOF</pre> | 数据库管理员 | 
| 创建订阅。 | 若要对 PostgreSQL 数据库创建订阅用户，请运行：<pre>psql -h <rds-endpoint> -d target -U postgres  <<EOF<br />SELECT pglogical.create_subscription(<br /> subscription_name := 'subscription1',<br /> replication_sets := array['default'],<br />    provider_dsn := 'host=<ec2-endpoint> port=5432 dbname=<source-dbname> password=<password> user=source-dbuser'<br />);</pre> | 数据库管理员 | 

### 验证数据
<a name="validate-your-data"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 检查源数据库和目标数据库。 | 检查源数据库和目标数据库，以确认数据迁移正在成功复制。您可以使用 `select count(1)` 对源表和目标表执行基本验证。 | 数据库管理员 | 

## 相关资源
<a name="migrate-from-postgresql-on-amazon-ec2-to-amazon-rds-for-postgresql-using-pglogical-resources"></a>
+ [Amazon RDS](https://aws.amazon.com/rds/)
+ [Amazon RDS 上 PostgreSQL 的逻辑复制](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication)（Amazon RDS 文档）
+ [pglogical（存储](https://github.com/2ndQuadrant/pglogical)库）GitHub 
+ [pglogical（GitHub 存储库自述文件）的局限性](https://github.com/2ndQuadrant/pglogical#limitations-and-restrictions)
+ 使用逻辑@@ [复制将 PostgreSQL 从本地或亚马逊迁移 EC2 到 Amazon RDS](https://aws.amazon.com/blogs/database/migrating-postgresql-from-on-premises-or-amazon-ec2-to-amazon-rds-using-logical-replication/)（AWS 数据库博客）