支援的版本:最新 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4

47.8. 邏輯解碼的同步複製支援 #

47.8.1. 概觀 #

邏輯解碼可用於建立同步複製解決方案,其使用者介面與串流複製的同步複製相同。 為此,必須使用串流複製介面 (請參閱第 47.3 節) 來串流輸出資料。 客戶端必須傳送 Standby status update (F) (請參閱第 53.4 節) 訊息,就像串流複製客戶端一樣。

注意

透過邏輯解碼接收變更的同步副本將在單一資料庫的範圍內運作。 由於與此相反,synchronous_standby_names 目前是伺服器範圍,這表示如果同時使用多個資料庫,此技術將無法正常運作。

47.8.2. 注意事項 #

在同步複製設定中,如果交易專門鎖定了 [使用者] 目錄表,則可能會發生死鎖。 有關使用者目錄表的資訊,請參閱第 47.6.2 節。 這是因為交易的邏輯解碼可能會鎖定目錄表以存取它們。 為了避免這種情況,使用者必須避免對 [使用者] 目錄表進行獨佔鎖定。 這可能會以下列方式發生

  • 在交易中對 pg_class 發出明確的 LOCK

  • 在交易中對 pg_class 執行 CLUSTER

  • pg_class 上的 LOCK 命令之後 PREPARE TRANSACTION,並允許對兩階段交易進行邏輯解碼。

  • pg_trigger 上的 CLUSTER 命令之後 PREPARE TRANSACTION,並允許對兩階段交易進行邏輯解碼。 僅當發布的表格具有觸發程序時,才會導致死鎖。

  • 在交易中對 [使用者] 目錄表執行 TRUNCATE

請注意,這些命令不僅會對上面列出的系統目錄表造成死鎖,也會對其他目錄表造成死鎖。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。