本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
針對 RDS for PostgreSQL 資料庫執行個體設定邏輯複寫
下列程序說明如何在兩個 RDS for PostgreSQL 資料庫執行個體之間啟動邏輯複寫。這些步驟假設來源 (發佈者) 和目標 (訂閱者) 都已設定 pglogical
延伸模組,如 設定 pglogical 延伸模組 中所述。
注意
訂閱者節點node_name
的 不能以 開頭rds
。
建立發佈者節點並定義要複製的資料表
這些步驟假設您的 RDS for PostgreSQL 資料庫執行個體具有一個資料庫,其中包含一或多個您要複寫到另一個節點的資料表。您必須在訂閱者上重新建立來自發佈者的資料表結構,因此必要時先取得資料表結構。您可以使用 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 for 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 for PostgreSQL 資料庫執行個體已使用 pglogical
延伸模組進行設定。如需詳細資訊,請參閱設定 pglogical 延伸模組。
-
使用
psql
來連線至您想要從發佈者接收更新的執行個體。psql --host=
target-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres
--password --dbname=labdb
-
在訂閱者 RDS for PostgreSQL 資料庫執行個體上,建立存在於發佈者上的相同資料表。在此範例中,資料表是
docs_lab_table
。您可以建立資料表,如下所示。CREATE TABLE docs_lab_table (a int PRIMARY KEY);
-
驗證此資料表是否為空的。
SELECT count(*) FROM docs_lab_table;
count ------- 0 (1 row)
-
將此 RDS for PostgreSQL 資料庫執行個體識別為訂閱者節點,如下所示。
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)
從此開始,對發佈者上資料表所做的變更會複寫到訂閱者上的資料表。