全部產品
Search
文件中心

ApsaraDB RDS:邏輯訂閱

更新時間:Jun 08, 2024

RDS PostgreSQL提供邏輯訂閱功能,支援在多個RDS PostgreSQL執行個體之間實現准即時表級單向同步,可以用於資料共用、資料匯總、資料拆分等業務情境。

如果您在全國多個地區部署業務,可以通過邏輯訂閱共用資料,例如將中心資料共用給其他地區,或者將其他地區資料匯總到中心進行即時分析查詢等。

本文簡單介紹邏輯訂閱的使用流程,樣本的流程如下:

源執行個體的資料庫src建立發布,發行資料表public.t1,然後在目的執行個體的資料庫dst建立訂閱sub1_from_pub1,訂閱源庫表public.t1。

更多詳情請參見邏輯訂閱原理與最佳實務

注意事項

您可以在單個執行個體的兩個表之間實現邏輯訂閱,也可以在同一VPC內的兩個執行個體間(必須使用內網地址)實現邏輯訂閱。

前提條件

  • 執行個體為RDS PostgreSQL 10及以上版本的雲端硬碟執行個體。

  • 執行個體參數wal_level的值為logical,您可以在控制台的參數設定頁面進行修改,該參數修改後需要重啟執行個體才會生效。重啟執行個體會造成串連中斷,請提前做好業務安排,謹慎操作。

  • 如果是同一VPC內兩個執行個體間實現邏輯訂閱,需要在各自的白名單中放通執行個體所在VPC的IP段,例如放通172.16.0.0/16。

  • 需要具有rds_superuser許可權的帳號,例如高許可權帳號或者高許可權帳號使用create role xxx with superuser建立的其他帳號。

操作步驟

源庫建立新發布

  1. 串連PostgreSQL源執行個體

  2. 在源庫裡建立新發布,命令如下:

    CREATE PUBLICATION <發布名稱> FOR TABLE <表名>;

    樣本

    CREATE PUBLICATION pub1 FOR TABLE public.t1;
    說明
    • 只能發布持久基表。詳情請參見CREATE PUBLICATION

    • 您可以通過SELECT * FROM pg_publication;查看當前資料庫有哪些發布。

目的庫建立訂閱

  1. 串連PostgreSQL目的執行個體

  1. 在目標庫建立新訂閱。

    • 如果源庫和目標庫在相同的執行個體,使用如下步驟:

      1. 在來源資料庫中建立邏輯複製槽。

      2. SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');
      3. 在目標資料庫中建立邏輯訂閱。

      4. 說明
        • 請提前在目標資料庫中建立與來源資料庫相同表結構的資料表。

        • 同執行個體時,必須使用WITH添加訂閱參數create_slot=false

        CREATE SUBSCRIPTION <訂閱名稱>
        CONNECTION 'dbname=<源執行個體資料庫名>'
        PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);
    • 如果源庫和目標庫在不同的執行個體,使用如下步驟:

      在目標資料庫中建立邏輯訂閱。

      CREATE SUBSCRIPTION <訂閱名稱>
          CONNECTION '<源庫的執行個體串連資訊>'
          PUBLICATION <源庫的發布名稱>;

      源庫的執行個體串連資訊格式為:host=<源執行個體內網網域名稱> port=<源執行個體內網連接埠> user=<源執行個體有發布許可權帳號> password=<源執行個體帳號的密碼> dbname=<源執行個體資料庫名>

      樣本:

      CREATE SUBSCRIPTION sub1_from_pub1 
      CONNECTION 'host=pgm-xxxxx.pgsql.singapore.rds.aliyuncs.com port=3433 user=test password=xxxxx dbname=src' 
      PUBLICATION pub1 WITH (enabled, create_slot, slot_name='sub1_from_pub1');  
      說明
      • 您可以通過SELECT * FROM pg_subscription;查看整個資料庫叢集有哪些訂閱。

      • 源庫的發布名稱後可以使用WITH附加相關訂閱參數,詳情請參見CREATE SUBSCRIPTION