1. 概述
透過資料管道實時同步 PostgreSQL 的數據時,來源資料源為 PostgreSQL,執行同步任務前,需要參考本文在資料源中進行一些配置,為後續的資料同步做好準備。
本文提供 Windows 版本的環境準備步驟,Linux 版本請參見:【Linux环境】PostgreSQL环境准备
2. CDC原理和支援
2.1 CDC原理
PostgreSQL 的邏輯解碼功能最早出現在9.4版本中,它是一種機制,允許提取提交到交易日誌中的更改,並透過匯出插件以使用者親和性方式處理這些更改。 此匯出插件必須在運作 PostgreSQL 伺服器之前安裝,並與一個複製槽一起啟動,以便用戶端能夠使用更改。
2.2 CDC支援
邏輯解碼(Logical Decoding):用於從 WAL 日誌中解析邏輯變更事件
複製協定(Replication Protocol):提供了消費者實時訂閱(甚至同步訂閱)資料庫變更的機制
快照匯出(export snapshot):允許匯出資料庫的一致快照(pg_export_snapshot)
複製槽(Replication Slot):用於儲存消費者偏移,磁軌訂閱者進度。
所以,根據以上,我們需要安裝邏輯解碼器,當前FineDataLink 支援 wal2json 解碼器,匯出格式為 json 。
3. 操作步驟
注:當前不支援同步檢視表。
同步來源資料庫的資料至去向資料源之前,需要確定 PostgreSQL 資料庫版本為資料管道支援的版本。
3.1 確認當前使用的資料庫版本
確認是否為資料管道同步任務所支援的版本。
當前僅支援 PostgreSQL 9.4 及以上的單實體非只讀資料庫。支援情況詳情參見:資料管道概述
3.2 修改REPLICA IDENTITY
該屬性決定了當資料發生 UPDATE、DELETE 時,日誌記錄的欄位。
DEFAULT - 更新和刪除將包含 primary key 列的先前值
NOTHING - 更新和刪除將不包含任何先前值
FULL - 更新和刪除將包含所有列的先前值
INDEX index name - 更新和刪除事件將包含名為 index name 的索引定義中包含的列的先前值。
修改程式碼如下:
alter table schema.tablename REPLICA IDENTITY FULL
Windows 版本可以進入 SQL shell,如下圖所示:
然後使用預設 postgres 帳號登入:
例如將模式為 public 的表 student 修改設定,則輸入如下語句:
3.3 安裝插件
3.3.1 安裝 wal2json
點選獲取 wal2json 安裝包:wal2json_windows_x64.zip
解壓後,從目錄中找到對應版本的 wal2json.dll,然後把 wal2json.dll copy到前邊安裝的 PostgreSQL 的 lib 目錄下,如下圖所示:
3.3.2 修改配置檔案
進入 PosgreSQL 安裝目錄下的 data 資料夾,進入 data 資料夾中,找到 postgresql.conf 在檔案末尾追加以下配置:
shared_preload_libraries = 'wal2json'
wal_level = logical
max_wal_senders = 10
max_replication_slots = 10
然後在 data 目錄下找到 pg_hba.conf,把下圖中紅圈中的兩行前邊的 # 去掉
3.4 重啟資料庫
進入 windows 系統中的服務下,重啟資料庫,如下圖所示:
3.5 使用者權限確認
以上都是用預設使用者 Postgres 進行,若用其他使用者進行配置,則需要該使用者為 PostgreSQL replication 角色、PostgreSQL login 角色,並且有需要同步的表的 select 權限。
建立使用者命令:
GRANT SELECT ON ALL TABLES IN SCHEMA schemaname TO username;
注:schemaname 為模式名稱,username為帳號稱。
設定使用者帳號密碼:
CREATE USER username WITH REPLICATION LOGIN PASSWORD 'password';
注:username 為帳號,password 為使用者密碼。
賦予使用者 replication和login權限命令
進入安裝目錄下的 data 資料夾,對配置檔案 pg_hba.conf 檢查,確定使用者擁有這些權限
3.6 檢查權限是否可用
進入 SQL shell 中,輸入如下命令,若 slot 資訊傳回了記錄,則說明配置成功:
select * from pg_create_logical_replication_slot('slot_test', 'wal2json');
4. 後續步驟
在配置好資料庫後,即可完成資料源配置。
需要在使用資料管道進行實時同步任務配置前,在 FineDataLink 中配置好需要同步的源端和目標端資料庫資料連結,以便在同步任務配置程式中,透過選擇資料源名稱來控制同步任務,詳情參見:建立並管理資料源
然後設定資料管道任務即可,詳情參見:配置管道任務
5. 注意事項
如果出現啟動不了的情況,可以在計算機管理的應用程式下,雙擊查看錯誤原因,如下圖所示:
對於9.6及以前版本,工具命令pg_resetwal 叫 pg_resetxlog,它的本職工作是清理不需要的WAL檔案,可以進入postgresql安裝路徑下的 bin 資料夾,在這裏開啟命令行,執行下面的命令:
.\pg_resetxlog.exe -f ..\data
在日誌重置後,再嘗試啟動資料庫。即:進入postgresql安裝路徑下的 bin 資料夾,在這裏開啟命令行,執行下面的命令:
.\pg_ctl start -D ..\data