2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4

pg_recvlogical

pg_recvlogical — 控制 PostgreSQL 邏輯解碼流

概要

pg_recvlogical [選項...]

描述

pg_recvlogical 控制邏輯解碼複製槽並從這些複製槽中流式傳輸資料。

它建立一個複製模式連線,因此它受到與 pg_receivewal 相同的約束,外加邏輯複製的約束(參見 第 47 章)。

pg_recvlogical 沒有相當於邏輯解碼 SQL 介面的 peek 和 get 模式。它在接收到資料時以及在正常退出時惰性地傳送重放確認。要檢查槽上的待處理資料而不消耗它,請使用 pg_logical_slot_peek_changes

在沒有致命錯誤的情況下,pg_recvlogical 將一直執行,直到被 SIGINTControl+C)或 SIGTERM 訊號終止。

pg_recvlogical 收到 SIGHUP 訊號時,它會關閉當前的輸出檔案,並使用 --file 選項指定的_檔名_開啟一個新檔案。這允許我們透過先重新命名當前檔案,然後傳送 SIGHUP 訊號給 pg_recvlogical 來輪換輸出檔案。

選項

必須指定以下至少一個選項來選擇一個操作

--create-slot

使用 --plugin 指定的輸出外掛,為 --dbname 指定的資料庫,建立一個名為 --slot 的新邏輯複製槽。

此操作需要 --slot--dbname

可以_與 --create-slot 一起指定 --enable-two-phase--enable-failover 選項。

--drop-slot

刪除名為 --slot 的複製槽,然後退出。

此操作需要 --slot

--start

開始從名為 --slot 的邏輯複製槽流式傳輸更改,直到被訊號終止。如果伺服器端的更改流以伺服器關機或斷開連線結束,則會進行迴圈重試,除非指定了 --no-loop

此操作需要 --slot--dbname--file

流的格式由建立槽時指定的輸出外掛確定。

連線必須是用於建立槽的同一個資料庫。

--create-slot--start 可以一起指定。--drop-slot 不能與其他操作組合。

以下命令列選項控制輸出的位置和格式以及其他複製行為

-E lsn
--endpos=lsn

--start 模式下,當接收達到指定的 LSN 時,自動停止複製並以正常退出狀態 0 退出。如果在非 --start 模式下指定,則會引發錯誤。

如果存在 LSN 精確等於 lsn 的記錄,則該記錄將被輸出。

--endpos 選項不瞭解事務邊界,並可能在事務中間截斷輸出。任何部分輸出的事務都不會被消耗,並在下次讀取槽時重新播放。單個訊息永遠不會被截斷。

--enable-failover

啟用槽的同步到備用伺服器。此選項只能與 --create-slot 一起指定。

-f filename
--file=filename

將接收到的已解碼的事務資料寫入此檔案。使用 - 表示 stdout

此引數對於 --start 是必需的。

-F interval_seconds
--fsync-interval=interval_seconds

指定 pg_recvlogical 應多久執行一次 fsync() 呼叫,以確保輸出檔案被安全地重新整理到磁碟。

伺服器會偶爾要求客戶端執行重新整理並將重新整理位置報告給伺服器。此設定是其附加的,用於更頻繁地執行重新整理。

指定間隔 0 會完全停用 fsync() 呼叫,同時仍將進度報告給伺服器。在這種情況下,資料可能會在崩潰時丟失。

-I lsn
--startpos=lsn

--start 模式下,從給定的 LSN 開始複製。有關此效果的詳細資訊,請參閱 第 47 章第 54.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
--enable-two-phase
--two-phase (已棄用)

啟用已準備事務的解碼。此選項只能與 --create-slot 一起指定。

-v
--verbose

啟用詳細模式。

以下命令列選項控制資料庫連線引數。

-d dbname
--dbname=dbname

要連線的資料庫。有關詳細說明,請參閱操作的描述。 dbname 可以是 連線字串。如果是,連線字串引數將覆蓋任何衝突的命令列選項。

此引數對於 --create-slot--start 是必需的。

-h hostname-or-ip
--host=hostname-or-ip

指定伺服器執行所在計算機的主機名。如果值以斜槓開頭,則將其用作 Unix 域套接字的目錄。預設值取自 PGHOST 環境變數(如果已設定),否則嘗試 Unix 域套接字連線。

-p
--port=

指定伺服器正在監聽連線的 TCP 埠或本地 Unix 域套接字副檔名。預設值為 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 在被 SIGINTSIGTERM 訊號終止時將以狀態 0 退出。(這是正常結束它的方式。因此它不是錯誤。)對於致命錯誤或其他訊號,退出狀態將是非零的。

環境變數

此實用程式與大多數其他 PostgreSQL 實用程式一樣,使用 libpq 支援的環境變數(參見 第 32.15 節)。

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

註釋

pg_recvlogical 將在源叢集上啟用組許可權時保留接收到的 WAL 檔案的組許可權。

示例

參見 第 47.1 節 獲取示例。

另請參閱

pg_receivewal

提交更正

如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。