PostgreSQL增量訂閱方案:利用Logical Decoding訂閱增量
阿新 • • 發佈:2019-01-09
Logical Decoding
是PostgreSQL9.4中的一個重要功能,它的功能是從PG的WAL日誌中,讀取資料庫更新資訊,然後“翻譯”(Decode)成邏輯的形式,可傳送到遠端從庫做資料同步。
該方案實現思路如下:
1.要利用該功能,首先需要修改PostgreSQL的配置檔案:
wal_level = logical
max_replication_slots = 1 # 該引數要大於等於1
2.建立Logical Replication Slot
SELECT * FROM pg_create_logical_replication_slot('regression_slot' , 'test_decoding');
-- 使用'test_decoding'外掛建立一個名為'regression_slot'的Logical Replication Slot
3.對PostgreSQL進行dml操作後,可以使用以下兩個語句檢視記錄
SELECT * FROM pg_logical_slot_peek_changes('regression_slot', NULL, NULL);
SELECT * FROM pg_logical_slot_get_changes('regression_slot', NULL, NULL);
兩者的區別在於pg_logical_slot_peek_changes
pg_logical_slot_get_changes
在查詢過記錄後,便會刪除記錄。顯示結果如下:
由查詢結果可知,
test_decoding
外掛將DML的WAL日誌解析成table schema.table_name:操作型別: 列名[該列資料型別]:值...
的形式,如果是對主鍵進行UPDATE
操作,那麼查詢結果中還會包含舊的主鍵值。對此,我們可以通過以下兩種方式獲取增量的SQL的格式:
(1) 通過修改
test_decoding
外掛的轉譯格式,使得其查詢結果顯示為可用的SQL語句;(2) 通過Java程式碼讀取查詢結果,拼湊成增量的SQL語句,然後在目標資料庫執行。
4. 在完成增量訂閱任務後,刪除
SELECT pg_drop_replication_slot('regression_slot');