

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

# 使用 Amazon RDS for PostgreSQL 的僅供讀取複本
<a name="USER_PostgreSQL.Replication.ReadReplicas"></a>

您可透過將僅供讀取複本新增至執行個體，以擴展 Amazon RDS for PostgreSQL 資料庫執行個體的讀取。與其他 Amazon RDS 資料庫引擎一樣，RDS for PostgreSQL 會使用 PostgreSQL 的原生複寫機制，使僅供讀取複本與來源資料庫上的變更保持最新狀態。如需僅供讀取複本與 Amazon RDS 的一般資訊，請參閱 [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

有關如何利用 RDS for PostgreSQL 處理僅供讀取複本，以下提供具體資訊。



## 使用 PostgreSQL 的僅供讀取複本限制
<a name="USER_PostgreSQL.Replication.ReadReplicas.Limitations"></a>

下列為 PostgreSQL 僅供讀取複本的限制：
+ PostgreSQL 僅供讀取複本皆為唯讀。雖然僅供讀取複本不是可寫入資料庫執行個體，但您可將其提升為獨立的 RDS for PostgreSQL 資料庫執行個體。但此程序是不可逆的。
+ 若 RDS for PostgreSQL 資料庫執行個體執行早於 14.1 的 PostgreSQL 版本，則無法從另一個僅供讀取複本建立僅供讀取複本。RDS for PostgreSQL 僅支援 RDS for PostgreSQL 14.1 版和更新版本上的階層式僅供讀取複本。如需詳細資訊，請參閱[使用具 RDS for PostgreSQL 的階層式僅供讀取複本](USER_PostgreSQL.Replication.ReadReplicas.Cascading.md)。
+ 若您提升 PostgreSQL 僅供讀取複本，則會成為可寫入資料庫執行個體。其會停止從來源資料庫執行個體接收預寫日誌 (WAL) 檔案，且不再是個唯讀執行個體。您可從提升的資料庫執行個體建立新的僅供讀取複本，如同對任何 RDS for PostgreSQL 資料庫執行個體所做的一樣。如需詳細資訊，請參閱[提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)。
+ 若從複寫鏈 (一系列階層式僅供讀取複本) 中提升 PostgreSQL 僅供讀取複本，則任何現有的下游僅供讀取複本皆會繼續自動從提升的執行個體接收 WAL 檔案。如需詳細資訊，請參閱[使用具 RDS for PostgreSQL 的階層式僅供讀取複本](USER_PostgreSQL.Replication.ReadReplicas.Cascading.md)。
+ 如果來源資料庫執行個體上未發生使用者交易，則 PostgreSQL 僅供讀取複本會回報最多五分鐘的複寫延遲。複本滯後的計算方式為 `currentTime - lastCommitedTransactionTimestamp`，亦即未處理任何交易時，複本滯後的值會增加一段時間，直到預寫日誌 (WAL) 區段切換為止。根據預設，RDS for PostgreSQL 每 5 分鐘切換一次 WAL 區段，這會導致交易記錄和報告的延遲減少。
+ 您無法為早於 14.1 的 RDS for PostgreSQL 版本開啟 PostgreSQL 僅供讀取複本的自動備份。RDS for PostgreSQL 14.1 及更新版本僅支援僅供讀取複本的自動備份。對於 RDS for PostgreSQL 13 及更早版本，若您想要備份僅供讀取複本，則請從僅供讀取複本建立快照。
+ 僅供讀取複本不支援時間點復原 (PITR)。您僅可使用具主 (寫入器) 執行個體的 PITR，而非僅供讀取複本。如需詳細資訊，請參閱 [將 Amazon RDS 的資料庫執行個體還原至指定時間](USER_PIT.md)。
+ PostgreSQL 第 12 版和較低版本的僅供讀取複本會在 60-90 天的維護時段內自動重新開機，以套用密碼輪換。複本若在排程的重新開機之前失去與來源的連線，仍會重新開機以繼續複寫。對於 PostgreSQL 第 13 版和更高版本，僅供讀取複本可能會在密碼輪換過程中經歷短暫的複寫中斷連線和重新連線。

# 使用 PostgreSQL 的僅供讀取複本組態
<a name="USER_PostgreSQL.Replication.ReadReplicas.Configuration"></a>

RDS for PostgreSQL 會使用 PostgreSQL 原生串流複寫來建立來源資料庫執行個體的唯讀複本。此僅供讀取複本資料庫執行個體是個非同步建立之來源資料庫執行個體的實體複寫。此由將預寫日誌 (WAL) 資料從來源資料庫執行個體傳輸至僅供讀取複本的特殊連線所建立。如需詳細資訊，請參閱 PostgreSQL 文件中的[串流複寫](https://www.postgresql.org/docs/14/warm-standby.html#STREAMING-REPLICATION)。

PostgreSQL 會將資料庫變更非同步串流至此安全連接，如同其在來源資料庫執行個體上所進行般。您可透過將 `ssl` 參數設定為 `1`，對用戶端應用程式至來源資料庫執行個體或任何僅供讀取複本的通訊進行加密。如需詳細資訊，請參閱 [將 SSL 與 PostgreSQL 資料庫執行個體搭配使用](PostgreSQL.Concepts.General.SSL.md)。

PostgreSQL 會使用*複寫*角色來執行串流複寫。角色有優先權，但無法用來修改任何資料。PostgreSQL 使用單一程序來處理複寫。

您可在不影響來源資料庫執行個體的作業或使用者的狀況下建立 PostgreSQL 僅供讀取複本。Amazon RDS 會為來源資料庫執行個體和僅供讀取複本設定必要的參數和權限，而不會影響服務。將會拍攝來源資料庫執行個體的快照，而此快照會用來建立僅供讀取複本。如於未來的某個時間點刪除僅供讀取複本，則不會發生停機。

您可以從相同區域內的一個來源資料庫執行個體建立至多 15 個僅供讀取複本。從 RDS for PostgreSQL 14.1 開始，您還可從來源資料庫執行個體以鏈結 (階層式) 的形式建立最多三個層級的僅供讀取複本。如需詳細資訊，請參閱[使用具 RDS for PostgreSQL 的階層式僅供讀取複本](USER_PostgreSQL.Replication.ReadReplicas.Cascading.md)。在所有情況下，來源資料庫執行個體皆需設定自動備份。您可將資料庫執行個體上的備份保留期設定為 0 以外的任何值以進行此作業。如需詳細資訊，請參閱[建立僅供讀取複本](USER_ReadRepl.Create.md)。

您可於與來源資料庫執行個體相同的 AWS 區域 中，建立 RDS for PostgreSQL資料庫執行個體的僅供讀取複本。此稱為*區域內*複寫。您也可以在與來源資料庫執行個體 AWS 區域 不同的 中建立僅供讀取複本。此稱為*跨區域*複寫。如需設定跨區域僅供讀取複本的相關資訊，請參閱 [在不同的 中建立僅供讀取複本 AWS 區域](USER_ReadRepl.XRgn.md)。支援「區域內」和「跨區域」複寫程序的各種機制會依 RDS for PostgreSQL 版本而略有不同，此說明於 [串流複寫如何用於不同的 RDS for PostgreSQL 版本](USER_PostgreSQL.Replication.ReadReplicas.Mechanisms-versions.md) 中。

若希望複寫作業順利運作，每個僅供讀取複本具備的運算和儲存資源數量應與來源資料庫執行個體相同。若您擴展來源資料庫執行個體，也請務必擴展僅供讀取複本。

若 Amazon RDS 阻止僅供讀取複本啟動，則期將會覆寫僅供讀取複本上任何不相容的參數。舉例來說，假設在資料庫執行個體的 `max_connections` 參數值高於僅供讀取複本上的值。在此情況下，Amazon RDS 會更新僅供讀取複本上的參數為與來源資料庫執行個體上相同的值。

RDS for PostgreSQL 僅供讀取複本可存取外部資料庫，這些資料庫可經由來源資料庫執行個體上的外部資料包裝函式 (FDW) 取得。例如，假設 RDS for PostgreSQL 資料庫執行個體使用 `mysql_fdw` 包裝函式來存取 RDS for MySQL 的資料。若是如此，您的僅供讀取複本也可存取該資料。其他受支援的 FDW 包括 `oracle_fdw`、`postgres_fdw` 和 `tds_fdw`。如需詳細資訊，請參閱[使用 Amazon RDS for PostgreSQL 支援的外部資料包裝函式](Appendix.PostgreSQL.CommonDBATasks.Extensions.foreign-data-wrappers.md)。

## 使用具多可用區域組態的 RDS for PostgreSQL 僅供讀取複本
<a name="USER_PostgreSQL.Replication.ReadReplicas.Configuration.multi-az"></a>

您可以從單一可用區域或多可用區域的資料庫執行個體建立僅供讀取複本。您可使用異地同步備份部署，利用備用複本來改善重要資料的耐用性和可用性。若來源資料庫進行容錯移轉，則*備用複本*是個可承擔工作負載的專用僅供讀取複本。您無法使用備用複本來提供讀取流量。但是，您可從高流量的多可用區域資料庫執行個體建立僅供讀取複本，藉此卸載唯讀查詢。若要進一步了解異地同步備份部署，請參閱 [Amazon RDS 的多可用區域資料庫執行個體部署](Concepts.MultiAZSingleStandby.md)。

若異地同步備份部署的來源資料庫執行個體容錯移轉至備用複本，則相關聯的僅供讀取複本都會切換為使用備用複本 (現為主要複本) 作為其複寫來源。僅供讀取複本可能需要重新啟動，視 RDS for PostgreSQL 版本而定，如下所示：
+ **PostgreSQL 13 及更新版本** – 無須重新啟動。僅供讀取複本將會自動與新的主要複本同步。但在某些狀況下，您的用戶端應用程式可能會快取僅供讀取複本的網域名稱服務 (DNS) 詳細資訊。若是如此，請將存留時間 (TTL) 值設定為少於 30 秒。這麼做可以防止僅供讀取複本保留過時的 IP 地址 (如此，可防止其與新的主要複本同步)。如需進一步了解有關此及其他最佳實務的詳細資訊，請參閱 [Amazon RDS 基本操作準則](CHAP_BestPractices.md#CHAP_BestPractices.DiskPerformance)。
+ **PostgreSQL 12 及所有早期版本** – 僅供讀取複本在容錯移轉至備用複本後會自動重新啟動，因為備用 (現為主要) 具有不同的 IP 地址和不同的執行個體名稱。重新啟動僅供讀取複本與新的主要複本同步。

如需進一步了解容錯移轉，請參閱 [容錯移轉 Amazon RDS 的多可用區域資料庫執行個體](Concepts.MultiAZ.Failover.md)。若要進一步了解僅供讀取複本如何在異地同步備份部署中運作，請參閱 [使用資料庫執行個體僅供讀取複本](USER_ReadRepl.md)。

如要提供僅供讀取複本的容錯移轉支援，您可將僅供讀取複本建立為多可用區域資料庫執行個體，則 Amazon RDS 會在另一個可用區域 (AZ) 中建立您複本的待命複本。建立您的僅供讀取複本做為多可用區域資料庫執行個體，與來源資料庫是否為多可用區域資料庫執行個體無關。

# 僅供讀取複本上的邏輯解碼
<a name="USER_PostgreSQL.Replication.ReadReplicas.LogicalDecoding"></a>

 RDS for PostgreSQL 支援使用 PostgreSQL 16.1 從待命複本進行邏輯複寫 這可讓您從唯讀待命複本建立邏輯解碼，以減輕主要資料庫執行個體上的負載。您可以為需要在多個系統間同步資料的應用程式實現更高的可用性。此功能可提升資料倉儲和資料分析的效能。

 此外，指定待命複本上的複寫插槽在該待命複本提升為主要複本後會保存下來。這表示，在發生主要資料庫執行個體容錯移轉，或待命複本提升為新的主要複本後，複寫插槽會保存下來，且之前的待命複本訂閱者不會受到影響。

**在僅供讀取複本上建立邏輯解碼**

1. **開啟邏輯複寫** – 若要在待命複本上建立邏輯解碼，您必須在來源資料庫執行個體及其實體複本上開啟邏輯複寫。如需詳細資訊，請參閱[使用 PostgreSQL 的僅供讀取複本組態](USER_PostgreSQL.Replication.ReadReplicas.Configuration.md)。
   + **若要為新建立的 RDS for PostgreSQL 資料庫執行個體開啟邏輯複寫** – 建立新的資料庫自訂參數群組，並將靜態參數 `rds.logical_replication` 設定為 `1`。然後，將此資料庫參數群組與來源資料庫執行個體及其實體僅供讀取複本建立關聯。如需詳細資訊，請參閱[將資料庫參數群組與 Amazon RDS 中的資料庫執行個體建立關聯](USER_WorkingWithParamGroups.Associating.md)。
   + **若要為現有的 RDS for PostgreSQL 資料庫執行個體開啟邏輯複寫** – 修改來源資料庫執行個體及其實體僅供讀取複本的資料庫自訂參數群組，將靜態參數 `rds.logical_replication` 設定為 `1`。如需詳細資訊，請參閱[修改 Amazon RDS 中的資料庫參數群組中的參數](USER_WorkingWithParamGroups.Modifying.md)。
**注意**  
您必須將資料庫執行個體重新開機，以套用這些參數變更。

   您可以使用下列查詢，驗證來源資料庫執行個體及其實體僅供讀取複本上的 `wal_level` 和 `rds.logical_replication` 的值。

   ```
   Postgres=>SELECT name,setting FROM pg_settings WHERE name IN ('wal_level','rds.logical_replication');
               
    name                    | setting 
   -------------------------+---------
    rds.logical_replication | on
    wal_level               | logical
   (2 rows)
   ```

1. **在來源資料庫中建立資料表** – 連線至來源資料庫執行個體中的資料庫。如需詳細資訊，請參閱[連線至執行 PostgreSQL 資料庫引擎的資料庫執行個體](USER_ConnectToPostgreSQLInstance.md)。

   使用下列查詢在來源資料庫中建立資料表，並插入值：

   ```
   Postgres=>CREATE TABLE LR_test (a int PRIMARY KEY);
   CREATE TABLE
   ```

   ```
   Postgres=>INSERT INTO LR_test VALUES (generate_series(1,10000));
   INSERT 0 10000
   ```

1. **建立來源資料表的發行集** – 使用下列查詢，在來源資料庫執行個體上建立資料表的發行集。

   ```
   Postgres=>CREATE PUBLICATION testpub FOR TABLE LR_test;
   CREATE PUBLICATION
   ```

   使用 SELECT 查詢，詳細驗證在來源資料庫執行個體和實體僅供讀取複本執行個體上建立的發行集。

   ```
   Postgres=>SELECT * from pg_publication;
                
   oid    | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot 
   -------+---------+----------+--------------+-----------+-----------+-----------+-------------+------------
    16429 | testpub |    16413 | f            | t         | t         | t         | t           | f
   (1 row)
   ```

1. **從邏輯複本執行個體建立訂閱** – 建立另一個 RDS for PostgreSQL 資料庫執行個體，做為邏輯複本執行個體。請確認 VPC 已設定正確，以確保此邏輯複本執行個體可存取實體僅供讀取複本執行個體。如需詳細資訊，請參閱[Amazon VPC 和 Amazon RDS](USER_VPC.md)。如果您的來源資料庫執行個體處於閒置狀態，可能會發生連線問題，主要複本不會將資料傳送至待命複本。

   ```
   Postgres=>CREATE SUBSCRIPTION testsub CONNECTION 'host=Physical replica host name port=port 
                   dbname=source_db_name user=user password=password' PUBLICATION testpub;
   NOTICE:  created replication slot "testsub" on publisher
   CREATE SUBSCRIPTION
   ```

   ```
   Postgres=>CREATE TABLE LR_test (a int PRIMARY KEY);
   CREATE TABLE
   ```

   使用 SELECT 查詢，詳細驗證邏輯複本執行個體上的訂閱。

   ```
   Postgres=>SELECT oid,subname,subenabled,subslotname,subpublications FROM pg_subscription;
               
   oid    | subname | subenabled | subslotname | subpublications 
   -------+---------+------------+-------------+-----------------
    16429 | testsub | t          | testsub     | {testpub}
   (1 row)
   postgres=> select count(*) from LR_test;
    count 
   -------
    10000
   (1 row)
   ```

1. **檢查邏輯複寫插槽狀態** – 您只能查看來源資料庫執行個體上的實體複寫插槽。

   ```
   Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
               
   slot_name                                    | slot_type | confirmed_flush_lsn 
   ---------------------------------------------+-----------+---------------------
    rds_us_west_2_db_dhqfsmo5wbbjqrn3m6b6ivdhu4 | physical  | 
   (1 row)
   ```

   不過，在僅供讀取複本執行個體上，您可以查看邏輯複寫插槽，且 `confirmed_flush_lsn` 值會隨著應用程式主動取用邏輯變更而變更。

   ```
   Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
               
   slot_name | slot_type | confirmed_flush_lsn 
   -----------+-----------+---------------------
    testsub   | logical   | 0/500002F0
   (1 row)
   ```

   ```
   Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots;
               
   slot_name | slot_type | confirmed_flush_lsn 
   -----------+-----------+---------------------
    testsub   | logical   | 0/5413F5C0
   (1 row)
   ```

# 使用具 RDS for PostgreSQL 的階層式僅供讀取複本
<a name="USER_PostgreSQL.Replication.ReadReplicas.Cascading"></a>

從 14.1 版開始，RDS for PostgreSQL 支援階層式僅供讀取複本。利用*階層式僅供讀取複本*，您可以擴展讀取，無須增加來源 RDS for PostgreSQL 資料庫執行個體的額外負荷。來源資料庫執行個體不會將 WAL 日誌的更新傳送至每個僅供讀取複本。反之，階層式系列中的每個僅供讀取複本都會將 WAL 日誌更新傳送至系列中的下一個僅供讀取複本。此會減少來源資料庫執行個體的負擔。

利用階層式僅供讀取複本，您的 RDS for PostgreSQL 資料庫執行個體會將 WAL 資料傳送至鏈結中的第一個僅供讀取複本。之後，該僅供讀取複本會將 WAL 資料傳送至鏈結中的第二個複本，依此類推。最終結果是鏈結中的所有僅供讀取複本皆具有來自 RDS for PostgreSQL 資料庫執行個體的變更，但並無僅在來源資料庫執行個體上的額外負荷。

您可從來源 RDS for PostgreSQL 資料庫執行個體的鏈結中建立一系列最多三個僅供讀取複本。例如，假設您有一個 RDS for PostgreSQL 14.1 資料庫執行個體 `rpg-db-main`。您可以執行下列動作：
+ 從 `rpg-db-main` 開始，建立鏈結中的第一個僅供讀取複本 `read-replica-1`。
+ 接下來，從 `read-replica-1`，建立鏈結中的下一個僅供讀取複本 `read-replica-2`。
+ 最後，從 `read-replica-2`，建立鏈結中的第三個僅供讀取複本 `read-replica-3`。

除了 `rpg-db-main` 系列中的第三個階層式僅供讀取複本之外，您無法建立另一個僅供讀取複本。從 RDS for PostgreSQL 來源資料庫執行個體至一系列階層式僅供讀取複本尾端的完整執行個體系列最多可包含四個資料庫執行個體。

若要使階層式僅供讀取複本正常運作，請開啟 RDS for PostgreSQL 上的自動備份。首先建立僅供讀取複本，然後開啟 RDS for PostgreSQL 資料庫執行個體上的自動備份。此程序與其他 Amazon RDS 資料庫引擎相同。如需詳細資訊，請參閱[建立僅供讀取複本](USER_ReadRepl.Create.md)。

與任何僅供讀取複本一樣，您可提升作為階層式一部分的僅供讀取複本。從僅供讀取複本鏈結中提升僅供讀取複本將會從鏈結中移除該僅供讀取複本。例如，假設您想要將部分工作負載從 `rpg-db-main` 資料庫執行個體移至新的執行個體，僅供會計部門使用。假設範例中的三個僅供讀取複本鏈結，您決定提升 `read-replica-2`。該鏈或受到下列影響：
+ 提升 `read-replica-2` 會將其從複寫鏈結中移除。
  + 其現在是一個完整的讀取/寫入資料庫執行個體。
  + 這會持續複寫至 `read-replica-3`，就像在提升之前所做的一樣。
+ 您的 `rpg-db-main` 會持續複寫至 `read-replica-1`。

如需提升僅供讀取複本的相關詳細資訊，請參閱 [提升僅供讀取複本為獨立的資料庫執行個體](USER_ReadRepl.Promote.md)。

**注意**  
RDS for PostgreSQL 不支援階層式複本的主要版本升級。在執行主要版本升級之前，必須先移除階層式複本。在來源資料庫執行個體和第一層複本上完成升級後，您可以重新建立複本。
對於階層式僅供讀取複本，RDS for PostgreSQL 在第一個複寫層支援每個來源資料庫執行個體 15 個僅供讀取複本，而在第二和第三複寫層支援每個來源資料庫執行個體 5 個僅供讀取複本。

# 建立 RDS for PostgreSQL 的跨區域階層式僅供讀取複本
<a name="USER_PostgreSQL.Replication.ReadReplicas.Xregion"></a>

RDS for PostgreSQL 支援跨區域階層式僅供讀取複本。您可以先從來源資料庫執行個體建立跨區域複本，再從中建立相同區域複本。您也可以先從來源資料庫執行個體建立相同區域複本，再從中建立跨區域複本。

**先建立跨區域複本，再建立相同區域複本**

您可以使用 RDS for PostgreSQL 資料庫執行個體搭配 14.1 版或更高版本 `rpg-db-main` 來執行下列動作：

1. 從 `rpg-db-main` (US-EAST-1) 開始，在鏈結中建立第一個跨區域僅供讀取複本 `read-replica-1` (US-WEST-2)。

1. 使用第一個跨區域 `read-replica-1` (US-WEST-2)，在鏈結中建立第二個僅供讀取複本 `read-replica-2` (US-WEST-2)。

1. 使用 `read-replica-2`，在鏈結中建立第三個僅供讀取複本 `read-replica-3` (US-WEST-2)。

**先建立相同區域複本，再建立跨區域複本**

您可以使用 RDS for PostgreSQL 資料庫執行個體搭配 14.1 版或更高版本 `rpg-db-main` 來執行下列動作：

1. 從 `rpg-db-main` (US-EAST-1) 開始，在鏈結中建立第一個僅供讀取複本 `read-replica-1` (US-WEST-1)。

1. 使用 `read-replica-1` (US-EAST-1) 開始，在鏈結中建立第一個跨區域僅供讀取複本 `read-replica-2` (US-WEST-2)。

1. 使用 `read-replica-2` (US-WEST-2)，在鏈結中建立第三個僅供讀取複本 `read-replica-3` (US-WEST-2)。

**建立跨區域僅供讀取複本的限制**
+ 資料庫複本的跨區域階層式鏈結最多可跨越兩個區域，最多四個層級。四個層級包括資料庫來源和三個僅供讀取複本。

**使用階層式僅供讀取複本的優點**
+ 改善讀取可擴展性 – 階層式複寫可將讀取查詢分散到多個複本，有助於平衡負載。這樣可以減輕寫入器資料庫的壓力，進而改善效能，尤其是在高讀取量應用程式中。
+ 地理分佈 – 階層式複本可位於不同的地理位置。如此，距離主要資料庫較遠的使用者就可以降低延遲，此外也可提供本機僅供讀取複本，進而提升效能和使用者體驗。
+ 高可用性和災難復原 – 在主要伺服器失敗的情況下，複本可以提升為主要伺服器，以確保持續性。階層式複寫可藉由提供多層容錯移轉選項來進一步強化這一點，從而改善系統的整體恢復能力。
+ 彈性和模組化成長 – 隨著系統成長，有以在不同層級新增複本，而無須對主要資料庫進行重大重新設定。這種模組化方法可實現複寫設定可擴展和可管理的增長。

**使用跨區域僅供讀取複本的最佳實務**
+ 在提升複本之前，先建立其他複本。這可以節省時間，並且有效處理工作負載。

# 串流複寫如何用於不同的 RDS for PostgreSQL 版本
<a name="USER_PostgreSQL.Replication.ReadReplicas.Mechanisms-versions"></a>

如 [使用 PostgreSQL 的僅供讀取複本組態](USER_PostgreSQL.Replication.ReadReplicas.Configuration.md) 中所討論，RDS for PostgreSQL 會使用 PostgreSQL 的原生串流複寫協定，從來源資料庫執行個體傳送 WAL 資料。此將來源 WAL 資料傳送至區域內和跨區域僅供讀取複本的僅供讀取複本。在 9.4 版中，PostgreSQL 引入了實體複寫槽，作為複寫程序的支援機制。

*實體複寫槽*會防止來源資料庫執行個體在所有僅供讀取複本使用 WAL 資料之前移除 WAL 資料。每個僅供讀取複本在來源資料庫執行個體上都有自己的實體槽。該插槽會追蹤複本可能需要的最舊 WAL (按邏輯序號，LSN)。在所有插槽和資料庫連接皆超出給定的 WAL (LSN) 之後，該 LSN 會成為下一個檢查點移除的候選項。

Amazon RDS 使用 Amazon S3 來封存 WAL 資料。對於區域內僅供讀取複本，您可於需要時使用此封存資料復原僅供讀取複本。若來源資料庫和僅供讀取複本之間的連接因任何原因而遭中斷，您可能會這麼做的範例。

於下表中，您可以找到 PostgreSQL 版本之間的差異，及 RDS for PostgreSQL 所使用之區域內和跨區域的支援機制摘要。


| 版本 | 區域內 | 跨區域 | 
| --- | --- | --- | 
| PostgreSQL 14.1 和更高版本 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_PostgreSQL.Replication.ReadReplicas.Mechanisms-versions.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_PostgreSQL.Replication.ReadReplicas.Mechanisms-versions.html)  | 
| PostgreSQL 13 和較低版本 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_PostgreSQL.Replication.ReadReplicas.Mechanisms-versions.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/USER_PostgreSQL.Replication.ReadReplicas.Mechanisms-versions.html)  | 

如需詳細資訊，請參閱[監控和調校複寫程序](USER_PostgreSQL.Replication.ReadReplicas.Monitor.md)。

## 了解控制 PostgreSQL 複寫的參數
<a name="USER_PostgreSQL.Replication.ReadReplicas.Parameters"></a>

下列參數影響複寫程序，並決定僅供讀取複本與來源資料庫執行個體保持於最新狀態的程度：

**max\$1wal\$1senders**  
`max_wal_senders` 參數指定來源資料庫執行個體可透過串流複寫協定同時支援的最大連接數。  
RDS for PostgreSQL 版本的預設值會有所不同：  
+ 第 13、14 和 15 版的預設值為 20。
+ 第 16 版和更高版本的預設值為 35。
此參數應設定為略高於僅供讀取複本的實際數量。若此參數對僅供讀取複本數量設定過低，則複寫會停止。  
如需詳細資訊，請參閱 PostgreSQL 文件的 [max\$1wal\$1senders](https://www.postgresql.org/docs/devel/runtime-config-replication.html#GUC-MAX-WAL-SENDERS)。  
`max_wal_senders` 是一個靜態參數，需要將資料庫執行個體重新開機，參數才會生效。

**wal\$1keep\$1segments**  
`wal_keep_segments` 參數指定來源資料庫執行個體保存於 `pg_wal` 目錄中預寫日誌 (WAL) 檔案的數量。預設設定為 32。  
若 `wal_keep_segments` 未對您的部署設定足夠大的值，則僅供讀取複本可能遠遠落後於串流複寫停止。若該狀況發生，Amazon RDS 會產生複寫錯誤，並開始在僅供讀取複本上進行復原。透過重複播放來自 Amazon S3 的來源資料庫執行個體的封存 WAL 資料來進行此作業。此還原程序會繼續進行，直到僅供讀取複本跟上進度，以繼續串流複寫。您可於 [範例：僅供讀取複本如何從複寫中斷復原範例：從複寫中斷復原僅供讀取複本](#USER_PostgreSQL.Replication.example-how-it-works) 中看到 PostgreSQL 日誌所擷取的這個程序。  
於 PostgreSQL 13 版中，`wal_keep_segments` 參數稱為 `wal_keep_size`。其用途與 `wal_keep_segments` 相同，但其預設值以 MB (2048 MB) 為單位，而非檔案數。如需詳細資訊，請參閱 PostgreSQL 文件中的 [wal\$1keep\$1segments](https://www.postgresql.org/docs/12/runtime-config-replication.html#GUC-WAL-KEEP-SEGMENTS) 和 [wal\$1keep\$1size](https://www.postgresql.org/docs/current/runtime-config-replication.html#GUC-WAL-KEEP-SIZE)。

**max\$1slot\$1wal\$1keep\$1size**  
`max_slot_wal_keep_size` 參數控制保留於 `pg_wal` 目錄中 RDS for PostgreSQL 資料庫執行個體的 WAL 資料量來處理插槽。此參數用於使用複寫插槽的組態。此參數的預設值為 `-1`，這表示來源資料庫執行個體上保留的 WAL 資料量並無限制。如需監控複寫槽的相關資訊，請參 [監控 RDS for PostgreSQL 資料庫執行個體的複寫槽](USER_PostgreSQL.Replication.ReadReplicas.Monitor.md#USER_PostgreSQL.Replication.ReadReplicas.Monitor-monitor-replication-slots)。  
如需此參數的詳細資訊，請參閱 PostgreSQL 文件中的 [max\$1slot\$1wal\$1keep\$1size](https://www.postgresql.org/docs/devel/runtime-config-replication.html#GUC-MAX-SLOT-WAL-KEEP-SIZE)。

當提供 WAL 資料給僅供讀取複本的串流中斷時，PostgreSQL 將切換為復原模式。它會使用來自 Amazon S3 的封存 WAL 資料或使用與複寫槽相關聯的 WAL 資料，來還原僅供讀取複本。此程序完成時，PostgreSQL 會重新建立串流複寫。

### 範例：僅供讀取複本如何從複寫中斷復原
<a name="USER_PostgreSQL.Replication.example-how-it-works"></a>

於下列範例中，您可以找到示範僅供讀取複本復原程序的日誌詳細資訊。範例來自在與來源資料庫相同的 中執行 PostgreSQL 12.9 版 AWS 區域 的 RDS for PostgreSQL 資料庫執行個體，因此不會使用複寫槽。 PostgreSQL 對於執行早於 14.1 版且具有區域內僅供讀取複本之 PostgreSQL 的其他 RDS for PostgreSQL 資料庫執行個體，復原程序是相同的。

當僅供讀取複本與來源資料庫執行個體失去連線時，Amazon RDS 會在日誌中將問題記錄為 `FATAL: could not receive data from WAL stream` 訊息與 `ERROR: requested WAL segment ... has already been removed`。如粗體行中所示，Amazon RDS 透過重複播放封存的 WAL 檔案來還原複本。

```
2014-11-07 19:01:10 UTC::@:[23180]:DEBUG:  switched WAL source from archive to stream after failure
2014-11-07 19:01:10 UTC::@:[11575]:LOG: started streaming WAL from primary at 1A/D3000000 on timeline 1
2014-11-07 19:01:10 UTC::@:[11575]:FATAL: could not receive data from WAL stream:
ERROR:  requested WAL segment 000000010000001A000000D3 has already been removed
2014-11-07 19:01:10 UTC::@:[23180]:DEBUG: could not restore file "00000002.history" from archive: return code 0
2014-11-07 19:01:15 UTC::@:[23180]:DEBUG: switched WAL source from stream to archive after failure recovering 000000010000001A000000D3
2014-11-07 19:01:16 UTC::@:[23180]:LOG:  restored log file "000000010000001A000000D3" from archive
```

當 Amazon RDS 在複本上重複播放足夠的封存 WAL 資料以補足空間，讓僅供讀取複本再次開始串流。恢復串流時，Amazon RDS 會將一個項目寫入日誌檔案中，類似下列內容。

```
2014-11-07 19:41:36 UTC::@:[24714]:LOG:started streaming WAL from primary at 1B/B6000000 on timeline 1
```

## 設定控制共用記憶體的參數
<a name="USER_PostgreSQL.Replication.ReadReplicas.Parameters.Settings"></a>

您設定的參數會決定用於追蹤交易 ID、鎖定和預備交易的共用記憶體大小。**待命執行個體的共用記憶體結構必須等於或大於主要執行個體的共用記憶體結構。**這樣可以確保前者在復原過程中不會耗盡共用記憶體。如果複本上的參數值小於主要複本上的參數值，Amazon RDS 將自動調整複本參數並重新啟動引擎。

受影響的參數包括：
+ max\$1connections
+ max\$1worker\$1processes
+ max\$1wal\$1senders
+ max\$1prepared\$1transactions
+ max\$1locks\$1per\$1transaction

為避免 RDS 因記憶體不足而將複本重新開機，我們建議採取滾動式重新開機的方式將參數變更套用至每個複本。當您設定參數時，必須套用下列規則：
+ **增加參數值：**
  + 您應一律先增加所有僅供讀取複本的參數值，並執行所有複本的滾動式重新開機。然後再將參數變更套用至主要執行個體，並重新開機。
+  **增加參數值：**
  + 您應該先減少主要執行個體的參數值，並執行重新開機。然後再將參數變更套用至所有相關聯的僅供讀取複本，並執行滾動式重新開機。

# 監控和調校複寫程序
<a name="USER_PostgreSQL.Replication.ReadReplicas.Monitor"></a>

我們強烈建議您定期監控 RDS for PostgreSQL 資料庫執行個體和僅供讀取複本。您需要確保您的僅供讀取複本與來源資料庫執行個體上的變更保持一致。當複寫程序發生中斷時，Amazon RDS 會通透地復原您的僅供讀取複本。但，最好完全避免需要復原。使用複寫槽進行復原比使用 Amazon S3 封存更快，但任何復原程序皆會影響讀取效能。

如要確定僅供讀取複本與來源資料庫執行個體保持一致的程度，可執行下列作業：
+ **檢查來源資料庫執行個體和複本間的 `ReplicaLag` 數量。***複本延遲*指的是讀取複本落後於其來源資料庫執行個體的時間量 (以秒為單位)。此指標會報告下列查詢結果。

  ```
  SELECT extract(epoch from now() - pg_last_xact_replay_timestamp()) AS "ReplicaLag";
  ```

  複本延遲可表示僅供讀取複本與來源資料庫執行個體保持一致的程度。這是來源資料庫執行個體與特定讀取執行個體之間的延遲量。複本延遲值較高可能表示來源資料庫執行個體與其僅供讀取複本所使用的資料庫執行個體類別或儲存體類型 (或兩者) 不相符。資料庫來源執行個體和所有僅供讀取複本的資料庫執行個體類別和儲存體類型應該相同。

  複本延遲也可為儲存體類型連線問題的結果。您可以在 Amazon CloudWatch 中透過檢視 Amazon RDS `ReplicaLag` 指標來監控複寫延遲。如需進一步了解 `ReplicaLag` 和 Amazon RDS 的其他指標，請參閱 [Amazon RDS 的 Amazon CloudWatch 指標](rds-metrics.md)。
+ **檢查 PostgreSQL 日誌，以取得可用來調整設定的資訊。**PostgreSQL 日誌會在每個檢查點擷取回收的交易日誌檔案數量，如下列範例所示。

  ```
  2014-11-07 19:59:35 UTC::@:[26820]:LOG:  checkpoint complete: wrote 376 buffers (0.2%);
  0 transaction log file(s) added, 0 removed, 1 recycled; write=35.681 s, sync=0.013 s, total=35.703 s;
  sync files=10, longest=0.013 s, average=0.001 s
  ```

  您可以使用這些資訊來確定指定時段內會回收多少個交易檔案。隨後，您可視需要變更 `wal_keep_segments` 的設定。例如，假設 PostgreSQL 日誌在 `checkpoint complete` 中顯示 `35 recycled`，間隔為 5 分鐘。於本案例中，`wal_keep_segments` 預設值 32 不足以跟上串流活動的進度，因此您應提高此參數的值。
+ **使用 Amazon CloudWatch 來監控可預測複寫問題的指標。**您可使用 Amazon CloudWatch 檢查已收集的指標，而非直接分析 PostgreSQL 日誌。例如，您可以檢查 `TransactionLogsGeneration` 指標值，來查看來源資料庫執行個體所產生的 WAL 資料量。在某些狀況下，資料庫執行個體上的工作負載可能會產生大量 WAL 資料。若是如此，您可能需要變更來源資料庫執行個體和僅供讀取複本的資料庫執行個體類別。使用具有高 (10 Gbps) 網路效能的執行個體類別可減少複本延遲。

## 監控 RDS for PostgreSQL 資料庫執行個體的複寫槽
<a name="USER_PostgreSQL.Replication.ReadReplicas.Monitor-monitor-replication-slots"></a>

RDS for PostgreSQL 的所有版本皆會對跨區域僅供讀取複本使用複寫槽。RDS for PostgreSQL 14.1 版和較新版本皆會對區域內僅供讀取複本使用複寫槽。區域內僅供讀取複本還會使用 Amazon S3 來封存 WAL 資料。換言之，若您的資料庫執行個體和僅供讀取複本執行 PostgreSQL 14.1 版或更新版本，則複寫槽和 Amazon S3 封存皆可用於復原僅供讀取複本。使用其複寫槽復原僅供讀取複本比從 Amazon S3 封存復原更快。因此，我們建議您監控複寫槽和及相關的指標。

您可檢視 RDS for PostgreSQL 資料庫執行個體上的複寫槽，方法是查詢 `pg_replication_slots` 檢視，如下所示。

```
postgres=> SELECT * FROM pg_replication_slots;
slot_name                  | plugin | slot_type | datoid | database | temporary | active | active_pid | xmin | catalog_xmin | restart_lsn | confirmed_flush_lsn | wal_status | safe_wal_size | two_phase
---------------------------+--------+-----------+--------+----------+-----------+--------+------------+------+--------------+-------------+---------------------+------------+---------------+-----------
rds_us_west_1_db_555555555 |        | physical  |        |          | f         | t      |      13194 |      |              | 23/D8000060 |                     | reserved   |               | f
(1 row)
```

`reserved` 值的 `wal_status` 表示插槽持有的 WAL 資料量在 `max_wal_size` 參數的範圍內。換言之，複寫槽的大小合適。其他可能的狀態值如下：
+ `extended` – 插槽超過 `max_wal_size` 設定，但會保留 WAL 資料。
+ `unreserved` – 插槽不再具有所有必要的 WAL 資料。其中一些將於下一個檢查點移除。
+ `lost` – 部分必要 WAL 資料已遭移除。該插槽不再可用。

只有在 `max_slot_wal_keep_size` 為非負值時，才會顯示 `wal_status` 的 `unreserved` 和 `lost` 狀態。

`pg_replication_slots` 檢視顯示了複寫槽的目前狀態。如要評估複寫槽的效能，您可使用 Amazon CloudWatch 並監控下列指標：
+ **`OldestReplicationSlotLag`** – 顯示來源上未被最延遲複本耗用的預先寫入日誌 (WAL) 資料量。
+ **`TransactionLogsDiskUsage`** – 顯示 WAL 資料正在使用多少儲存空間。僅供讀取複本大幅延遲時，此指標的值可能會顯著提高。

若要進一步了解如何使用 Amazon CloudWatch 及其用於 RDS for PostgreSQL 的指標，請參閱 [使用 Amazon CloudWatch 監控 Amazon RDS 指標](monitoring-cloudwatch.md)。如需有關監視 RDS for PostgreSQL 資料庫執行個體上串流複寫的詳細資訊，請參閱 *AWS 資料庫部落格*上的 [Amazon RDS PostgreSQL 複寫的最佳實務](https://aws.amazon.com/blogs/database/best-practices-for-amazon-rds-postgresql-replication/)。

# 設定 RDS for PostgreSQL 的延遲複寫
<a name="rpg-delayed-replication"></a>

## 概觀和優點
<a name="rpg-delayed-replication-overview"></a>

RDS for PostgreSQL 中的延遲複寫功能，可讓您刻意延遲將主要資料庫的資料變更複寫到一或多個待命 (僅供讀取複本) 伺服器的作業。藉此可以獲得防止資料損毀、意外資料遺失或錯誤交易的重要機制，以免所有複本立即受到影響。

下列 RDS for PostgreSQL 版本支援延遲複寫：
+ 14.19 和更高的 14 版本
+ 15.14 和更高的 15 版本
+ 16.10 和更高的 16 版本
+ 17.6 和更高的 17 版本

在複寫程序中導入時間延遲後，您將有機會在資料相關事件影響到整個資料庫叢集之前加以偵測並且回應。延遲複寫的主要優點如下：
+ 可讓您在意外刪除、更新或其他邏輯錯誤之後復原。
+ 提供緩衝，防止損毀的資料擴散到您整個資料庫叢集。
+ 提供額外的復原點選項，補強您的傳統備份策略。
+ 可讓您根據組織的特定需求和風險承受能力設定延遲期間。

## 啟用和設定延遲複寫
<a name="enabling-rpg-delayed-replication"></a>

若要在 RDS for PostgreSQL 僅供讀取複本上啟用延遲複寫，請依照下列步驟操作：

**注意**  
對於串聯僅供讀取複本，請使用如下所述的相同 `recovery_min_apply_delay` 參數和步驟。

**啟用延遲複寫**

1. 建立新的自訂參數群組，或修改現有群組。如需詳細資訊，請參閱[Amazon RDS 資料庫執行個體的資料庫參數群組](USER_WorkingWithDBInstanceParamGroups.md)。

1. 在新的參數群組中，設定 `recovery_min_apply_delay` 參數：
   + 將值設定為所需的延遲 (以毫秒為單位)。例如，3600000 代表 1 小時的延遲。
   + 允許的範圍：0 到 86400000 毫秒 (0 到 24 小時)
   + 預設：0

1. 將參數群組套用至要為延遲複寫設定的僅供讀取複本執行個體。

1. 將僅供讀取複本執行個體重新開機，讓變更生效。
**注意**  
此 `recovery_min_apply_delay` 參數是動態的。如果您修改的是已連接至執行個體的現有參數群組，則變更會立即生效，而不需要重新開機。不過，將新的參數群組套用至執行個體時，必須重新開機變更才會生效。

## 管理延遲複寫復原
<a name="managing-rpg-delayed-replication"></a>

在使用傳統時間點復原方法可能不足夠或太耗時的情況下，延遲複寫尤有效用。

在延遲複寫期間，您可以使用下列 PostgreSQL 函數來管理復原程序：
+ `pg_wal_replay_pause()`：要求暫停延遲複本上的復原程序。
+ `pg_wal_replay_resume()`：在復原程序先前已暫停的情況下，予以重新啟動。
+ `pg_is_wal_replay_paused()`：檢查復原程序目前是否暫停。
+ `pg_get_wal_replay_pause_state()`：取得復原程序的目前狀態 (未暫停、已要求暫停或已暫停)。

具有 `rds_superuser` 角色的使用者在 `pg_wal_replay_pause()` 和 `pg_wal_replay_resume()` 上具有 EXECUTE 權限。如果其他資料庫使用者需要存取這些函數，您必須為他們授予 `rds_superuser` 角色。如需 `rds_superuser` 角色的詳細資訊，請參閱 [了解 rds\$1superuser 角色](Appendix.PostgreSQL.CommonDBATasks.Roles.rds_superuser.md)。

存取其他函數 (例如 `pg_is_wal_replay_paused()` 和 `pg_get_wal_replay_pause_state()`) 不需要 `rds_superuser` 角色。

您可以使用下列復原目標參數，精確控制延遲複本要復原到的時間點。這些參數是靜態的，必須將資料庫重新開機才能套用變更：
+ recovery\$1target
+ recovery\$1target\$1lsn
+ recovery\$1target\$1name
+ recovery\$1target\$1time
+ recovery\$1target\$1xid
+ recovery\$1target\$1inclusive

**重要**  
您一次只能指定一個復原目標參數。在組態檔中設定多個復原目標參數，會導致錯誤。

## 規劃考量
<a name="rpg-delayed-replication-considerations"></a>

規劃 RDS for PostgreSQL 的延遲複寫時，請考量下列事項：
+ 在 `rdsrepladmin` 憑證的自動輪換期間 (每 90 天發生一次)，延遲的僅供讀取複本可能會暫時進入 `REPLICATION_ERROR` 狀態。如果延遲複本有足夠的 WAL 日誌可維持設定的延遲，則可能會暫停 WAL 接收器程序，而在來源上導致 WAL 累積。您應監控複本上的複寫狀態，以及來源上的儲存體耗用量，以避免達到儲存已滿狀態。
+ 延遲的僅供讀取複本在經歷系統事件 (例如重新開機或重新啟動) 時，會進入 WAL 接收器程序保持非作用中的 `REPLICATION_ERROR` 狀態，直到設定的延遲期間到期為止。此行為可能會造成來源執行個體上的 WAL 累積，進而導致儲存體耗盡。請考量下列預防措施：
  + 設定 CloudWatch 警示，以監控來源執行個體上的儲存體使用率。
  + 啟用儲存體自動調整功能，以處理非預期的 WAL 增長。
  + 在來源執行個體上設定 `max_slot_wal_keep_size` 參數，以限制每個複寫插槽的 WAL 保留期。
  + 定期監控複寫延遲和插槽狀態。
+ 較長的延遲會增加複本上的 WAL 日誌，而耗用更多儲存體。使用 CloudWatch 警示監控儲存空間、啟用自動調整，或在需要時同步複本。
+ 在提升延遲的僅供讀取複本時不會接受 `recovery_min_apply_delay` 參數，且會立即套用所有待處理的 WAL 記錄。
+ `recovery_min_apply_delay` 參數在階層式複寫設定的各個層級是獨立的。在複本上設定的延遲，並不會新增至任何階層式複本的延遲。

如需詳細資訊，請參閱 [RDS for PostgreSQL 僅供讀取複本文件](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ReadRepl.html)和 [RDS for PostgreSQL 災難復原文件](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PostgreSQL.Disaster-Recovery.html)。

## 了解限制
<a name="rpg-delayed-replication-limitations"></a>

Amazon RDS for PostgreSQL 的延遲複寫功能有下列限制：
+ 在設定延遲複寫時，藍/綠部署有下列限制：
  + **綠色來源執行個體** — 即使設定於參數群組中，`recovery_min_apply_delay parameter` 仍會被忽略。綠色來源執行個體上的任何延遲設定都不會生效。
  + **綠色複本執行個體** — `recovery_min_apply_delay parameter` 完全受支援，且會套用至 PostgreSQL 組態檔。在轉換工作流程期間，延遲設定會正常運作。
  + 主要版本升級的 RDS 藍/綠部署
+ 在主要版本升級期間，任何延遲的僅供讀取複本都會自動終止，以允許來源執行個體繼續升級程序，確保能盡可能縮短停機時間。來源執行個體完成升級後，您必須手動重新建立延遲的複本。
+  延遲複寫與下列功能不相容。
  + RDS for PostgreSQL 邏輯複寫
  + RDS for PostgreSQL 多可用區域叢集 (包括傳入和傳出複寫)
  + Aurora PostgreSQL

# RDS for PostgreSQL 僅供讀取複本的疑難排解
<a name="USER_PostgreSQL.Replication.ReadReplicas.Troubleshooting"></a>

您可以在下面找到一些常見 RDS for PostgreSQL 僅供讀取複本問題的疑難排解建議。

**終止導致僅供讀取複本延遲的查詢**  
處於作用中或閒置狀態、且在資料庫中長時間執行的交易可能會干擾 WAL 複寫程序，進而增加複寫延遲。因此，請務必使用 PostgreSQL `pg_stat_activity` 檢視來監控這些交易的執行時間。  
對主要執行個體執行如下的查詢，找出長時間執行之查詢的程序 ID (PID)：  

```
SELECT datname, pid,usename, client_addr, backend_start,
xact_start, current_timestamp - xact_start AS xact_runtime, state,
backend_xmin FROM pg_stat_activity WHERE state='active';
```

```
SELECT now() - state_change as idle_in_transaction_duration, now() - xact_start as xact_duration,* 
FROM  pg_stat_activity 
WHERE state  = 'idle in transaction'
AND   xact_start is not null
ORDER BY 1 DESC;
```
識別查詢的 PID 之後，您可以選擇結束查詢。  
對主要執行個體執行如下的查詢，以終止長時間執行的查詢：  

```
SELECT pg_terminate_backend(PID);
```