我正在做一項關於logical decoding的研究,我已經能夠創建一個插槽並使用streaming replication protocol將數據庫中的所有事務複製到另一個插槽,並且它工作得非常好。可以使用邏輯解碼來複制單個表?
但我需要只複製一個表而不是數據庫上的所有表。
所以,我的問題是:logical decoding
是否允許過濾單個表的流?
我當前的提示是創建一個自定義logical decoding output plugin,我錯了嗎?
我已經建立了一個更新基於output plugin
上contrib/test decoding
和PostgreSQL源,這是一個很好的解決方法。但是它對於實際用例並沒有用,所以我決定將其他項目作爲fork和update的參考。
對我來說最好的是wal2json,所以我決定分叉它並添加表格過濾器作爲選項,而不是硬編碼表格名稱。
Here是fork和this is the changeset。
如何使用
首先創建的插槽與wal2json
插件:
pg_recvlogical -d Postgres的--slot test_slot --create插槽-P wal2json
然後啓動接收流
pg_recvlogical -d postgres --slot t est_slot --start -o限制到= table_foo,table_bar -f -
現在我們已經準備好接受的table_foo
只有table_bar
更新。
這是一個很好的挑戰,我不是一個C開發人員,我知道這些代碼需要一些優化,但現在它的工作原理好於預期。
你是對的,這是可能的,但這並不容易。來自BDR項目的UDR已經支持使用邏輯解碼僅複製一個表格。你也可以使用Londiste,它比較成熟,但是開銷較高。 –
@CraigRinger感謝您的建議,我已閱讀UDR文檔,似乎可以做到這一點,但我遇到了試圖設置和使用'udr-plugin'的問題,所以我現在就離開它,並且會在不久的將來做一些測試。我非常感謝你的建議。 – Darwin
FWIW我們在2ndQuadrant正致力於簡化UDR並將輸出插件至少獲取到9.6。 Londiste目前是一個更容易的選擇。隨意在pgsql-general郵件列表上或在SO上詢問UDR。 –