PostgreSQL 13: 邏輯複製支援分割槽表
PostgreSQL 13: 邏輯複製支援分割槽表
PostgreSQL 10 版本開始支援邏輯複製,在12版本之前邏輯複製僅支援普通表,不支援分割槽表,如果需要對分割槽表進行邏輯複製,需單獨對所有分割槽進行邏輯複製。
PostgreSQL 13 版本的邏輯複製新增了對分割槽表的支援,如下:
- 可以顯式地釋出分割槽表,自動釋出所有分割槽。
- 從分割槽表中新增/刪除分割槽將自動從釋出中新增/刪除。
發行說明的解釋如下:
發行說明
Allow partitioned tables to be logically replicated via publications (Amit Langote)
Previously, partitions had to be replicated individually. Now partitioned tables can be published explicitly causing all partitions to be automatically published. Addition/removal of partitions from partitioned tables are automatically added/removed from publications. The CREATE PUBLICATION option publish_via_partition_root controls whether changes to partitions are published as their own or their ancestors.
Allow logical replication into partitioned tables on subscribers (Amit Langote)
Previously, subscribers could only receive rows into non-partitioned tables.
關於邏輯複製之前部落格有介紹,詳見PostgreSQL10:邏輯複製(Logical Replication)之一,本文僅做簡單演示。
環境規劃
環境規劃,如下:
節點 | 資料庫版本 | IP | 埠 |
---|---|---|---|
源庫 | PostgreSQL 13beta1 | 192.168.2.11 | 1922 |
目標庫 | PostgreSQL 13beta1 | 192.168.2.13 | 1924 |
環境準備
在源庫、目標庫安裝 PostgreSQL 13beta1軟體並初始化資料庫,本文略。
部署mydb資料庫
在源庫和目標庫上均部署 mydb 資料庫,如下:
1
|
--建使用者
|
建立分割槽表
在源庫和目標庫上建立分割槽表,如下:
1
|
--建立父表
|
部署邏輯複製
源庫執行以下操作,如下:
1
|
--建立複製使用者
|
以上有個步驟是給源庫上的repuser使用者賦相關許可權,如果不給repuser使用者賦權,建立訂閱後目標庫無法初始化同步源庫資料。
目標庫建立訂閱,如下:
1
|
mydb=# CREATE SUBSCRIPTION sub1 CONNECTION 'host=192.168.2.11 port=1922 dbname=mydb user=repuser' PUBLICATION pub1;
|
注意配置好源庫的pg_hba.conf
和.pgpass
檔案,否則建立訂閱會報相關的連線不上錯誤。
資料驗證
源庫批量插入資料,如下:
1
|
INSERT INTO tbl_log(user_id,create_time)
|
源庫檢視資料,如下:
1
|
[pg13@ydtf01 ~]$ psql mydb pguser -p 1922
|
目標庫驗證資料,如下:
1
|
[pg13@ydtf03 ~]$ psql mydb pguser -p 1924
|
可見分割槽表的資料已從源庫同步到目標庫。