pg_recvlogical — 控制 PostgreSQL 邏輯解碼串流
pg_recvlogical
[option
...]
pg_recvlogical
控制邏輯解碼複寫槽並從此類複寫槽串流資料。
它會建立複寫模式連線,因此它受到與 pg_receivewal 相同的限制,以及邏輯複寫的限制 (請參閱 第 47 章)。
pg_recvlogical
沒有等同於邏輯解碼 SQL 介面的 peek 和 get 模式。它會在接收資料時以及在乾淨退出時延遲地傳送重播確認。若要檢查插槽上擱置中的資料而不消耗它,請使用 pg_logical_slot_peek_changes
。
在沒有嚴重錯誤的情況下,pg_recvlogical 將執行到被 SIGINT (Control+C) 或 SIGTERM 信號終止。
必須指定以下至少一個選項才能選擇動作
--create-slot
建立一個新的邏輯複寫槽,其名稱由 --slot
指定,使用由 --plugin
指定的輸出外掛程式,用於由 --dbname
指定的資料庫。
可以使用 --create-slot
指定 --two-phase
,以啟用已準備交易的解碼。
--drop-slot
捨棄名稱由 --slot
指定的複寫槽,然後退出。
--start
開始從 --slot
指定的邏輯複寫槽串流變更,持續到被訊號終止。如果伺服器端變更串流以伺服器關機或中斷連線結束,除非指定 --no-loop
,否則在迴圈中重試。
串流格式由建立插槽時指定的輸出外掛程式決定。
連線必須連線到用於建立插槽的相同資料庫。
可以一起指定 --create-slot
和 --start
。--drop-slot
無法與其他動作組合。
以下命令列選項控制輸出的位置和格式以及其他複寫行為
-E lsn
--endpos=lsn
在 --start
模式中,當接收達到指定的 LSN 時,自動停止複寫並以正常退出狀態 0 退出。如果在未處於 --start
模式時指定,則會引發錯誤。
如果存在 LSN 恰好等於 lsn
的記錄,則會輸出該記錄。
--endpos
選項不知道交易邊界,並且可能會在交易過程中截斷輸出。任何部分輸出的交易都不會被消耗,並且在下次從插槽讀取時會再次重播。個別訊息永遠不會被截斷。
-f filename
--file=filename
將接收和解碼的交易資料寫入此檔案。使用 -
代表 stdout。
-F interval_seconds
--fsync-interval=interval_seconds
指定 pg_recvlogical 應該多久發出 fsync()
呼叫,以確保輸出檔案安全地刷新到磁碟。
伺服器偶爾會要求用戶端執行刷新並向伺服器報告刷新位置。此設定是對此的補充,以更頻繁地執行刷新。
指定 0
的間隔會完全停用發出 fsync()
呼叫,同時仍向伺服器報告進度。在這種情況下,如果發生崩潰,可能會遺失資料。
-I lsn
--startpos=lsn
在 --start
模式中,從給定的 LSN 開始複寫。如需此效果的詳細資訊,請參閱 第 47 章 和 第 53.4 節 中的文件。在其他模式中忽略。
--if-not-exists
當指定 --create-slot
且已存在具有指定名稱的插槽時,不要產生錯誤。
-n
--no-loop
當與伺服器的連線遺失時,不要在迴圈中重試,直接退出。
-o name
[=value
]
--option=name
[=value
]
將選項 name
傳遞給輸出外掛程式,如果指定,則傳遞選項值 value
。存在哪些選項及其效果取決於使用的輸出外掛程式。
-P plugin
--plugin=plugin
建立插槽時,使用指定的邏輯解碼輸出外掛程式。請參閱 第 47 章。如果插槽已存在,則此選項無效。
-s interval_seconds
--status-interval=interval_seconds
此選項的效果與 pg_receivewal 中同名選項的效果相同。請參閱其中的描述。
-S slot_name
--slot=slot_name
在 --start
模式下,使用現有的邏輯複製槽,名稱為 slot_name
。在 --create-slot
模式下,建立具有此名稱的複製槽。在 --drop-slot
模式下,刪除具有此名稱的複製槽。
-t
--two-phase
啟用已預備交易的解碼。此選項只能與 --create-slot
一起指定。
-v
--verbose
啟用詳細模式。
下列命令列選項控制資料庫連線參數。
-d dbname
--dbname=dbname
要連線的資料庫。 有關詳細資訊,請參閱操作的描述。 dbname
可以是連線字串。 如果是這樣,連線字串參數將覆蓋任何衝突的命令列選項。 預設值為使用者名稱。
-h hostname-or-ip
--host=hostname-or-ip
指定伺服器執行所在機器的host name。 如果該值以斜線開頭,則將其用作 Unix domain socket 的目錄。預設值取自 PGHOST
環境變數(如果已設定),否則會嘗試 Unix domain socket 連線。
-p port
--port=port
指定伺服器正在偵聽連線的 TCP 埠或本機 Unix domain socket 檔案擴充名。 預設值為 PGPORT
環境變數(如果已設定)或編譯時預設值。
-U user
--username=user
要連線的使用者名稱。 預設值為目前作業系統使用者名稱。
-w
--no-password
永遠不要發出密碼提示。 如果伺服器需要密碼驗證,並且沒有其他方式(例如 .pgpass
檔案)提供密碼,則連線嘗試將失敗。 此選項在沒有使用者輸入密碼的批次工作和腳本中很有用。
-W
--password
強制 pg_recvlogical 在連線到資料庫之前提示輸入密碼。
由於如果伺服器要求密碼驗證,pg_recvlogical 會自動提示輸入密碼,因此這個選項並非絕對必要。 但是,pg_recvlogical 會浪費一次連線嘗試來確定伺服器是否需要密碼。 在某些情況下,值得輸入 -W
以避免額外的連線嘗試。
以下是其他可用選項
-V
--version
印出 pg_recvlogical 版本並結束。
-?
--help
顯示有關 pg_recvlogical 命令列參數的說明並結束。
當 pg_recvlogical 被 SIGINT 或 SIGTERM 訊號終止時,將以狀態 0 結束。(這是結束它的正常方式。因此,這不是錯誤。)對於致命錯誤或其他訊號,結束狀態將為非零。
與大多數其他 PostgreSQL 工具一樣,此工具使用 libpq 支援的環境變數 (請參閱 第 32.15 節)。
環境變數 PG_COLOR
指定是否在診斷訊息中使用顏色。可能的值為 always
、auto
和 never
。
如果來源叢集上啟用了群組權限,pg_recvlogical 將保留收到的 WAL 檔案的群組權限。
有關範例,請參閱 第 47.1 節。
如果您在文件中發現任何不正確的地方、與您使用特定功能的經驗不符,或需要進一步說明,請使用此表單來報告文件問題。