

# 示例：将逻辑复制与 Aurora PostgreSQL 数据库集群结合使用
<a name="AuroraPostgreSQL.Replication.Logical.PostgreSQL-Example"></a>

以下过程说明了如何在两个 Aurora PostgreSQL 数据库集群之间启动逻辑复制。发布者和订阅者都必须配置为进行逻辑复制，如[为 Aurora PostgreSQL 数据库集群设置逻辑复制](AuroraPostgreSQL.Replication.Logical.Configure.md)中详述。

作为指定发布者的 Aurora PostgreSQL 数据库集群也必须允许访问复制插槽。为此，请基于 Amazon VPC 服务修改与 Aurora PostgreSQL 数据库集群的虚拟公有云（VPC）关联的安全组。通过将与订阅者的 VPC 关联的安全组添加到发布者的安全组来允许入站访问。有关安全组的更多信息，请参阅《Amazon VPC 用户指南》**中的[使用安全组控制到资源的流量](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

完成这些初步步骤后，您可以对发布者使用 PostgreSQL 命令 `CREATE PUBLICATION`，并对订阅者使用 PostgreSQL 命令 `CREATE SUBSCRIPTION`，详见以下过程。

**在两个 Aurora PostgreSQL 数据库集群之间启动逻辑复制过程**

这些步骤假设您的 Aurora PostgreSQL 数据库集群有一个写入器实例，其中包含一个用于创建示例表的数据库。

1. **在发布者 Aurora PostgreSQL 数据库集群上**

   1. 使用以下 SQL 语句创建一个表。

      ```
      CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
      ```

   1. 使用以下 SQL 语句将数据插入到发布者数据库。

      ```
      INSERT INTO LogicalReplicationTest VALUES (generate_series(1,10000));
      ```

   1. 使用以下 SQL 语句验证表中是否存在数据。

      ```
      SELECT count(*) FROM LogicalReplicationTest;
      ```

   1. 使用 `CREATE PUBLICATION` 语句为此表创建发布，如下所示。

      ```
      CREATE PUBLICATION testpub FOR TABLE LogicalReplicationTest;
      ```

1. **在订阅者 Aurora PostgreSQL 数据库集群上**

   1. 在订阅者上创建与在发布者上创建的同一个 `LogicalReplicationTest` 表，如下所示。

      ```
      CREATE TABLE LogicalReplicationTest (a int PRIMARY KEY);
      ```

   1. 验证此表为空。

      ```
      SELECT count(*) FROM LogicalReplicationTest;
      ```

   1. 创建订阅以获取来自发布者的更改。您需要使用以下有关发布者 Aurora PostgreSQL 数据库集群的详细信息。
      + **host** – 发布者 Aurora PostgreSQL 数据库集群的写入器数据库实例。
      + **port** – 写入器数据库实例正在侦听的端口。PostgreSQL 的默认值为 5432。
      + **dbname** – 数据库的名称。

      ```
      CREATE SUBSCRIPTION testsub CONNECTION 
         'host=publisher-cluster-writer-endpoint port=5432 dbname=db-name user=user password=password' 
         PUBLICATION testpub;
      ```
**注意**  
作为安全最佳实践，请指定除此处所示提示以外的密码。

      创建订阅后，将在发布者上创建逻辑复制槽。

   1. 要验证此示例中的初始数据是否在订阅者上复制，请在订阅者数据库中使用以下 SQL 语句。

      ```
      SELECT count(*) FROM LogicalReplicationTest;
      ```

在发布者上进行的任何其他更改都会被复制到订阅者。

逻辑复制会影响性能。我们建议您在复制任务完成后关闭逻辑复制。