為 RDS的SQL邏輯複寫 - Amazon Relational Database Service

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

RDS的SQL邏輯複寫

下列程序說明如何在兩個 RDS適用於 PostgreSQL 資料庫執行個體。這些步驟假設來源 (發佈者) 和目標 (訂閱者) 都已設定 pglogical 延伸模組,如 設定 pglogical 延伸模組 中所述。

建立發佈者節點並定義要複製的資料表

這些步驟假設您的 RDS的資料庫,該資料庫SQL具有您要複寫至另一個節點的一或多個資料表。您必須在訂閱者上重新建立來自發佈者的資料表結構,因此必要時先取得資料表結構。您可以使用 psq1 中繼命令 \d tablename,然後在訂閱者執行個體上建立相同的資料表,以執行該操作。下列程序會在發佈者 (來源) 上建立範例資料表,以供示範之用。

  1. 使用 psql 連線至具有資料表的執行個體,您想要將該資料表用作訂閱者的來源。

    psql --host=source-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb

    如果您沒有要複寫的現有資料表,則可以建立如下的範例資料表。

    1. 使用以下SQL陳述式建立範例資料表。

      CREATE TABLE docs_lab_table (a int PRIMARY KEY);
    2. 使用下列SQL陳述式將產生的資料填入資料表。

      INSERT INTO docs_lab_table VALUES (generate_series(1,5000)); INSERT 0 5000
    3. 使用下列SQL陳述式來驗證資料表中是否存在資料。

      SELECT count(*) FROM docs_lab_table;
  2. 識別此 RDS作為 PostgreSQL 資料庫執行個體的發佈者節點,如下所示。

    SELECT pglogical.create_node( node_name := 'docs_lab_provider', dsn := 'host=source-instance.aws-region.rds.amazonaws.com port=5432 dbname=labdb'); create_node ------------- 3410995529 (1 row)
  3. 將您要複寫的資料表新增至預設複寫集。如需複寫集的詳細資訊,請參閱 pglogical 文件中的 Replication sets (複寫集)。

    SELECT pglogical.replication_set_add_table('default', 'docs_lab_table', 'true', NULL, NULL); replication_set_add_table --------------------------- t (1 row)

發佈者節點設定完成。您現在可以設定訂閱者節點,從發佈者接收更新。

設定訂閱者節點並建立訂閱來接收更新

這些步驟假設 RDS的 PostgreSQL 資料庫執行個體已使用 pglogical 擴充功能設定。如需詳細資訊,請參閱設定 pglogical 延伸模組

  1. 使用 psql 來連線至您想要從發佈者接收更新的執行個體。

    psql --host=target-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
  2. 在訂閱者 RDS針對 PostgreSQL 資料庫執行個體 ,建立存在於發佈者上的相同資料表。在此範例中,資料表是 docs_lab_table。您可以建立資料表,如下所示。

    CREATE TABLE docs_lab_table (a int PRIMARY KEY);
  3. 驗證此資料表是否為空的。

    SELECT count(*) FROM docs_lab_table; count ------- 0 (1 row)
  4. 識別此 RDS作為SQL訂閱者節點,如下所示。

    SELECT pglogical.create_node( node_name := 'docs_lab_target', dsn := 'host=target-instance.aws-region.rds.amazonaws.com port=5432 sslmode=require dbname=labdb user=postgres password=********'); create_node ------------- 2182738256 (1 row)
  5. 建立訂閱。

    SELECT pglogical.create_subscription( subscription_name := 'docs_lab_subscription', provider_dsn := 'host=source-instance.aws-region.rds.amazonaws.com port=5432 sslmode=require dbname=labdb user=postgres password=*******', replication_sets := ARRAY['default'], synchronize_data := true, forward_origins := '{}' ); create_subscription --------------------- 1038357190 (1 row)

    完成此步驟時,會在訂閱者上的資料表中建立來自發佈者上資料表的資料。您可以使用下列SQL查詢來驗證是否已發生這種情況。

    SELECT count(*) FROM docs_lab_table; count ------- 5000 (1 row)

從此開始,對發佈者上資料表所做的變更會複寫到訂閱者上的資料表。