

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 範例：搭配 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`，以及在訂閱者上使用 `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;
      ```

發佈者發生的任何其他變更會被複寫到訂閱者。

邏輯複寫會影響效能。建議您在複寫任務完成後關閉邏輯複寫。