PostgreSQL pg_recvlogical

2021-09-13 16:26 更新

pg_recvlogical — 控制 PostgreSQL 邏輯解碼流

大綱

pg_recvlogical [option...]

描述

pg_recvlogical控制邏輯解碼復(fù)制槽以及來自這種復(fù)制槽的流數(shù)據(jù)。

它會創(chuàng)建一個復(fù)制模式的連接,因此它受到和pg_receivewal 相同的約束,還有邏輯復(fù)制(第 48 章)的約束。

pg_recvlogical與邏輯解碼SQL接口的peek和get模式?jīng)]有等效性。它咋接收到數(shù)據(jù)以及干凈地退出時,它會惰性地發(fā)送數(shù)據(jù)的確認(rèn)。為了檢查一個槽上還未消費的待處理數(shù)據(jù),可以使用pg_logical_slot_peek_changes

選項

必須至少要指定下列選項之一來選擇一個動作:

--create-slot

--dbname指定的數(shù)據(jù)庫用--slot 指定的名稱創(chuàng)建一個新的邏輯復(fù)制槽,使用 --plugin指定的輸出插件。

--drop-slot

刪除名稱由--slot指定的復(fù)制槽,然后退出。

--start

--slot指定的邏輯復(fù)制槽開始進(jìn)行流式傳送更改,一直繼續(xù) 到被一個信號終止。如果服務(wù)器端關(guān)機(jī)或者斷開連接導(dǎo)致更改流結(jié)束,會進(jìn)入一個 循環(huán)一直重試,通過指定--no-loop可以防止這種情況下進(jìn)入 循環(huán)重試。

流格式由槽創(chuàng)建時指定的輸出插件決定。

連接必須是連接到用于創(chuàng)建該槽的同一個數(shù)據(jù)庫上。

--create-slot--start可以被一起指定。 --drop-slot不能和另一個動作組合在一起。

下面的命令行選項控制輸出的位置和格式以及其他復(fù)制行為:

-E lsn
--endpos=lsn

--start模式中,當(dāng)接收過程到達(dá)指定的LSN時會自動地停止復(fù)制并且以正常的退出狀態(tài)0退出。如果不處于--start模式時指定這個選項,則會發(fā)生錯誤。

如果有一個記錄的LSN正好等于lsn,則該記錄將被輸出。

--endpos不會察覺到事務(wù)邊界并且可能會在一個事務(wù)中間截斷輸出。任何部分輸出的事務(wù)都將不會被消費,并且在下一次從該槽中讀取時將會重放該事務(wù)。單個的消息不會被截斷。

-f filename
--file=filename

把接收到并且解碼好的事務(wù)數(shù)據(jù)寫入到一個文件。使用-可以寫到stdout。

-F interval_seconds
--fsync-interval=interval_seconds

指定pg_recvlogical發(fā)出 fsync()調(diào)用確保輸出文件被安全地刷到磁盤的頻度。

服務(wù)器將會偶爾要求客戶端執(zhí)行一次刷寫并且把刷寫位置報告給服務(wù)器。 這個設(shè)置可以在此之外更加頻繁地執(zhí)行刷寫。

指定間隔為0會完全禁止發(fā)出fsync() 調(diào)用,但是仍會報告進(jìn)度給服務(wù)器。在這種情況下,發(fā)生崩潰會導(dǎo)致數(shù)據(jù)丟失。

-I lsn
--startpos=lsn

--start模式中,從給定的 LSN 開始復(fù)制。這個參數(shù)的 效果請見第 48 章第 52.4 節(jié)中的文檔。在其他模式中會忽略這個參數(shù)。

--if-not-exists

當(dāng)指定--create-slot并且具有指定名稱 的槽已經(jīng)存在時不要拋出錯誤。

-n
--no-loop

當(dāng)服務(wù)器連接丟失時,不要在循環(huán)中重試,直接退出。

-o name[=value]
--option=name[=value]

如果指定了輸出插件,把選項值value 傳遞給選項name。存在哪些選項以及它們的效果 取決于使用的輸出插件。

-P plugin
--plugin=plugin

在創(chuàng)建一個槽時使用指定的邏輯解碼輸出插件。 見第 48 章。如果該槽已經(jīng)存在,這個選項沒有效果。

-s interval_seconds
--status-interval=interval_seconds

這個選項和pg_receivewal中的同名選項具有 相同的效果。請參考那里的描述。

-S slot_name
--slot=slot_name

--start模式中,使用名為slot_name 的已有邏輯復(fù)制槽。在--create-slot模式中,使用這個名稱 創(chuàng)建該槽。在--drop-slot模式中,刪除這個名稱指定的槽。

-v
--verbose

開啟詳細(xì)輸出模式。

下列命令行選項控制數(shù)據(jù)庫連接參數(shù)。

-d database
--dbname=database

要連接的數(shù)據(jù)庫。這個選項的詳細(xì)含義請見動作的描述。dbname 可以是連接字符串。 如果是這樣,連接字符串參數(shù)將覆蓋任何沖突的命令行選項。默認(rèn)為用戶名。

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

指定服務(wù)器正在運行的機(jī)器的主機(jī)名。如果該值開始于一個斜線, 它被用作一個 Unix 域套接字的目錄。默認(rèn)是從 PGHOST環(huán)境變量中取得(如果被設(shè)置), 否則將嘗試一次 Unix 域套接字連接。

-p port
--port=port

指定服務(wù)器正在監(jiān)聽連接的 TCP 端口或本地 Unix 域套接字文件擴(kuò)展名。 默認(rèn)是放在PGPORT環(huán)境變量中(如果被設(shè)置), 否則使用編譯在程序中的默認(rèn)值。

-U user
--username=user

要作為哪個用戶連接。默認(rèn)是用當(dāng)前操作系統(tǒng)用戶名。

-w
--no-password

從不發(fā)出一個口令提示。如果服務(wù)器要求口令認(rèn)證并且沒有 其他方式提供口令(例如一個.pgpass文件), 那么連接嘗試將失敗。這個選項對于批處理任務(wù)和腳本有用, 因為在其中沒有一個用戶來輸入口令。

-W
--password

強(qiáng)制pg_dump在連接到一個數(shù)據(jù)庫之前提示要求一個口令。

這個選項不是必須的,因為如果服務(wù)器要求口令認(rèn)證, pg_dump將自動提示要求一個口令。 但是,pg_dump將浪費一次連接嘗試 來發(fā)現(xiàn)服務(wù)器想要一個口令。在某些情況下,值得鍵入 -W來避免額外的連接嘗試。

還有下列附加選項可用:

-V
--version

打印pg_recvlogical的版本并且退出。

-?
--help

顯示關(guān)于pg_recvlogical命令行參數(shù)的幫助,并且退出。

環(huán)境

和大部分其他PostgreSQL工具相似,這個工具也使用libpq(見第 33.14 節(jié))支持的環(huán)境變量。

環(huán)境變量PG_COLOR規(guī)定在診斷消息中是否使用顏色??赡艿闹禐?code class="literal">always、auto、never。

注解

如果在源服務(wù)器上啟用了組權(quán)限,pg_recvlogical將會在接收到的WAL文件上保留組權(quán)限。

例子

一個例子請見第 48.1 節(jié)


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號