全部產品
Search
文件中心

ApsaraDB RDS:邏輯訂閱

更新時間:Feb 15, 2025

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

功能簡介

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

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

  1. 發布端執行個體的資料庫testdb01建立發布,發行資料表為public.t1。

  2. 訂閱端執行個體的資料庫testdb02建立訂閱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. 在發布端資料庫中建立邏輯複製槽。

      SELECT pg_create_logical_replication_slot('<slot_name>', 'pgoutput');
    2. 在訂閱端資料庫中,建立與待訂閱的發布端資料庫表具有相同結構和名稱的表。

    3. 在訂閱端資料庫中建立邏輯訂閱。

      • RDS PostgreSQL 16及之後的版本

        CREATE SUBSCRIPTION <訂閱名稱>
        CONNECTION 'host=127.0.0.1 port=<內網連接埠> user=<具有發布許可權的帳號> password=<帳號的密碼> dbname=<發布端資料庫名>'
        PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);
      • RDS PostgreSQL 10~15

        CREATE SUBSCRIPTION <訂閱名稱>
        CONNECTION 'dbname=<發布端資料庫名>'
        PUBLICATION publication_name WITH (create_slot=false,slot_name=<slot_name>);
    重要

    發布端資料庫和訂閱端資料庫位於相同的執行個體時,必須使用WITH添加訂閱參數create_slot=false

    發布端和訂閱端是不同執行個體的不同資料庫

    1. 在訂閱端資料庫中,建立與待訂閱的發布端資料庫表具有相同結構和名稱的表。

    2. 在訂閱端資料庫中建立邏輯訂閱。

      CREATE SUBSCRIPTION <訂閱名稱>
      CONNECTION 'host=<發布端執行個體內網網域名稱> port=<發布端執行個體內網連接埠> user=<發布端執行個體有發布許可權的帳號> password=<發布端執行個體帳號的密碼> dbname=<發布端執行個體資料庫名>'
      PUBLICATION <發布端資料庫的發布名稱>;

    樣本:

    CREATE SUBSCRIPTION sub1_from_pub1 
    CONNECTION 'host=pgm-2ze7n9zb0n1f****.pg.rds.aliyuncs.comm port=5432 user=testdbuser password=****x dbname=testdb01' 
    PUBLICATION pub1 WITH (enabled, create_slot, slot_name='sub1_from_pub1');  
    說明
    • 您可以通過SELECT * FROM pg_subscription;命令查看整個資料庫叢集有哪些訂閱。

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