本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
為 RDS的SQL邏輯複寫
下列程序說明如何在兩個 RDS適用於 PostgreSQL 資料庫執行個體。這些步驟假設來源 (發佈者) 和目標 (訂閱者) 都已設定 pglogical
延伸模組,如 設定 pglogical 延伸模組 中所述。
建立發佈者節點並定義要複製的資料表
這些步驟假設您的 RDS的資料庫,該資料庫SQL具有您要複寫至另一個節點的一或多個資料表。您必須在訂閱者上重新建立來自發佈者的資料表結構,因此必要時先取得資料表結構。您可以使用 psq1
中繼命令 \d
,然後在訂閱者執行個體上建立相同的資料表,以執行該操作。下列程序會在發佈者 (來源) 上建立範例資料表,以供示範之用。tablename
-
使用
psql
連線至具有資料表的執行個體,您想要將該資料表用作訂閱者的來源。psql --host=
source-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
如果您沒有要複寫的現有資料表,則可以建立如下的範例資料表。
-
使用以下SQL陳述式建立範例資料表。
CREATE TABLE docs_lab_table (a int PRIMARY KEY);
-
使用下列SQL陳述式將產生的資料填入資料表。
INSERT INTO docs_lab_table VALUES (generate_series(1,5000));
INSERT 0 5000
-
使用下列SQL陳述式來驗證資料表中是否存在資料。
SELECT count(*) FROM docs_lab_table;
-
-
識別此 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)
-
將您要複寫的資料表新增至預設複寫集。如需複寫集的詳細資訊,請參閱 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 延伸模組。
-
使用
psql
來連線至您想要從發佈者接收更新的執行個體。psql --host=
target-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
-
在訂閱者 RDS針對 PostgreSQL 資料庫執行個體 ,建立存在於發佈者上的相同資料表。在此範例中,資料表是
docs_lab_table
。您可以建立資料表,如下所示。CREATE TABLE docs_lab_table (a int PRIMARY KEY);
-
驗證此資料表是否為空的。
SELECT count(*) FROM docs_lab_table;
count ------- 0 (1 row)
-
識別此 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)
-
建立訂閱。
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)
從此開始,對發佈者上資料表所做的變更會複寫到訂閱者上的資料表。