【Windows環境】PostgreSQL環境準備

  • 文檔創建者:Roxy
  • 編輯次數:12
  • 最近更新:Nikozhan 于 2025-05-07
  • 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



    附件列表


    主題: 實時管道
    已經是第一篇
    已經是最後一篇
    • 有幫助
    • 沒幫助
    • 只是瀏覽
    • 评价文档,奖励 1 ~ 100 随机 F 豆!