支援的版本: 目前 (17) / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4

pg_recvlogical

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_recvlogicalSIGINTSIGTERM 訊號終止時,將以狀態 0 結束。(這是結束它的正常方式。因此,這不是錯誤。)對於致命錯誤或其他訊號,結束狀態將為非零。

環境

與大多數其他 PostgreSQL 工具一樣,此工具使用 libpq 支援的環境變數 (請參閱 第 32.15 節)。

環境變數 PG_COLOR 指定是否在診斷訊息中使用顏色。可能的值為 alwaysautonever

備註

如果來源叢集上啟用了群組權限,pg_recvlogical 將保留收到的 WAL 檔案的群組權限。

範例

有關範例,請參閱 第 47.1 節

提交更正

如果您在文件中發現任何不正確的地方、與您使用特定功能的經驗不符,或需要進一步說明,請使用此表單來報告文件問題。