支援的版本:目前 (17) / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

19.17. 開發者選項 #

以下參數適用於開發者測試,絕不應在生產資料庫中使用。但是,其中一些參數可用於協助復原嚴重損壞的資料庫。因此,它們已從範例 postgresql.conf 檔案中排除。請注意,許多這些參數需要特殊的原始碼編譯標記才能完全運作。

allow_in_place_tablespaces (boolean) #

允許將表空間建立為 pg_tblspc 內的目錄,當提供空的location字串給 CREATE TABLESPACE 指令時。這旨在允許測試主要和備用伺服器在同一台機器上運行的複製場景。此類目錄可能會使備份工具感到困惑,因為它們期望在該位置僅找到符號連結。只有超級使用者和具有適當 SET 權限的使用者才能變更此設定。

allow_system_table_mods (boolean) #

允許修改系統資料表的結構,以及對系統資料表執行其他某些危險操作。即使對於超級使用者,通常也不允許這樣做。不明智地使用此設定可能會導致無法挽回的資料遺失或嚴重損壞資料庫系統。只有超級使用者和具有適當 SET 權限的使用者才能變更此設定。

backtrace_functions (string) #

此參數包含以逗號分隔的 C 函數名稱清單。如果發生錯誤,且發生錯誤的內部 C 函數名稱與清單中的值相符,則會將回溯與錯誤訊息一起寫入伺服器日誌。這可用於偵錯原始碼的特定區域。

並非所有平台都支援回溯,且回溯的品質取決於編譯選項。

只有超級使用者和具有適當 SET 權限的使用者才能變更此設定。

debug_discard_caches (integer) #

當設定為 1 時,每個系統目錄快取項目會在第一次可能的機會失效,無論是否真的發生會使其失效的事情。系統目錄的快取實際上被停用,因此伺服器將執行得非常緩慢。較高的值會遞迴地執行快取失效,這甚至更慢,並且僅對測試快取邏輯本身有用。預設值 0 選擇正常的目錄快取行為。

當嘗試觸發涉及並行目錄變更的難以重現的錯誤時,此參數可能非常有用,但在其他情況下很少需要。有關詳細資訊,請參閱原始碼檔案 inval.cpg_config_manual.h

當在編譯時定義了 DISCARD_CACHES_ENABLED 時,支援此參數(當使用 configure 選項 --enable-cassert 時會自動發生)。在生產版本中,其值將始終為 0,並且嘗試將其設定為其他值將會引發錯誤。

debug_io_direct (string) #

要求核心使用 O_DIRECT (大多數類 Unix 系統)、F_NOCACHE (macOS) 或 FILE_FLAG_NO_BUFFERING (Windows) 來最小化關係資料和 WAL 檔案的快取效應。

可以設定為空字串(預設值)以停用直接 I/O 的使用,或設定為應該使用直接 I/O 的操作的逗號分隔清單。有效的選項為 data (用於主要資料檔案)、wal (用於 WAL 檔案) 和 wal_init (用於最初配置 WAL 檔案時)。

某些作業系統和檔案系統不支援直接 I/O,因此非預設設定可能會在啟動時被拒絕或導致錯誤。

目前,此功能會降低效能,僅供開發者測試使用。

debug_parallel_query (enum) #

允許使用平行查詢進行測試,即使在預期不會有效能提升的情況下。debug_parallel_query 允許的值有:off(僅在預期可提升效能時使用平行模式)、on(強制所有被認為安全的查詢使用平行查詢),以及 regress(如同 on,但有一些額外的行為變更,如下所述)。

更具體地說,將此值設定為 on 會在任何被認為安全的查詢計畫的頂端新增一個 Gather 節點,以便該查詢在平行工作程序中執行。 即使平行工作程序不可用或無法使用,在平行查詢上下文中禁止的操作(例如啟動子交易)也將被禁止,除非規劃器認為這會導致查詢失敗。 如果設定此選項時發生失敗或出現非預期的結果,則查詢中使用的一些函數可能需要標記為 PARALLEL UNSAFE(或可能是 PARALLEL RESTRICTED)。

將此值設定為 regress 具有與設定為 on 相同的所有效果,外加一些旨在促進自動迴歸測試的額外效果。 通常,來自平行工作程序的消息包含一個上下文行,表明這一點,但設定為 regress 會抑制此行,以便輸出與非平行執行中的輸出相同。 此外,此設定新增到計畫中的 Gather 節點在 EXPLAIN 輸出中會被隱藏,以便輸出與將此設定設為 off 時獲得的輸出相符。

ignore_system_indexes (boolean) #

讀取系統表時忽略系統索引(但在修改表時仍然更新索引)。 這在從損壞的系統索引中恢復時很有用。 此參數在會話開始後無法更改。

post_auth_delay (integer) #

在新的伺服器程序啟動並執行身份驗證程序後,延遲的時間量。 這旨在讓開發人員有機會使用偵錯器附加到伺服器程序。 如果指定此值時沒有單位,則將其視為秒。 值為零(預設值)會停用延遲。 此參數在會話開始後無法更改。

pre_auth_delay (integer) #

在新的伺服器程序被 fork 之後,執行身份驗證程序之前,延遲的時間量。 這旨在讓開發人員有機會使用偵錯器附加到伺服器程序,以追蹤身份驗證中的錯誤行為。 如果指定此值時沒有單位,則將其視為秒。 值為零(預設值)會停用延遲。 此參數只能在 postgresql.conf 檔案或伺服器命令行中設定。

trace_notify (boolean) #

LISTENNOTIFY 命令產生大量的偵錯輸出。 client_min_messageslog_min_messages 必須為 DEBUG1 或更低,才能分別將此輸出發送到客戶端或伺服器日誌。

trace_sort (boolean) #

如果開啟,則發出有關排序操作期間資源使用情況的資訊。 僅當在編譯 PostgreSQL 時定義了 TRACE_SORT 巨集,此參數才可用。(但是,目前預設定義了 TRACE_SORT)。

trace_locks (boolean) #

如果開啟,則發出有關鎖定使用情況的資訊。 轉儲的資訊包括鎖定操作的類型、鎖定的類型以及被鎖定或解鎖的物件的唯一識別符號。 還包括已在此物件上授予的鎖定類型以及在此物件上等待的鎖定類型的位元遮罩。 對於每種類型的鎖定,還會轉儲已授予的鎖定數和等待鎖定數的計數以及總計。 此處顯示了日誌檔案輸出的範例。

LOG:  LockAcquire: new: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(AccessShareLock)
LOG:  GrantLock: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(2) req(1,0,0,0,0,0,0)=1 grant(1,0,0,0,0,0,0)=1
      wait(0) type(AccessShareLock)
LOG:  UnGrantLock: updated: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(AccessShareLock)
LOG:  CleanUpLock: deleting: lock(0xb7acd844) id(24688,24696,0,0,0,1)
      grantMask(0) req(0,0,0,0,0,0,0)=0 grant(0,0,0,0,0,0,0)=0
      wait(0) type(INVALID)

有關轉儲結構的詳細資訊可以在 src/include/storage/lock.h 中找到。

僅當在編譯 PostgreSQL 時定義了 LOCK_DEBUG 巨集,此參數才可用。

trace_lwlocks (boolean) #

如果開啟,則發出有關輕量級鎖定使用情況的資訊。 輕量級鎖定主要用於提供對共享記憶體資料結構的互斥訪問。

僅當在編譯 PostgreSQL 時定義了 LOCK_DEBUG 巨集,此參數才可用。

trace_userlocks (boolean) #

如果開啟,則發出有關使用者鎖定使用情況的資訊。 輸出與 trace_locks 的輸出相同,僅適用於諮詢鎖定。

僅當在編譯 PostgreSQL 時定義了 LOCK_DEBUG 巨集,此參數才可用。

trace_lock_oidmin (integer) #

如果設定,則不要追蹤此 OID 以下的表上的鎖定(用於避免系統表上的輸出)。

僅當在編譯 PostgreSQL 時定義了 LOCK_DEBUG 巨集,此參數才可用。

trace_lock_table (integer) #

無條件追蹤此表(OID)上的鎖定。

僅當在編譯 PostgreSQL 時定義了 LOCK_DEBUG 巨集,此參數才可用。

debug_deadlocks (boolean) #

如果設定,則在發生死鎖逾時時,轉儲有關所有目前鎖定的資訊。

僅當在編譯 PostgreSQL 時定義了 LOCK_DEBUG 巨集,此參數才可用。

log_btree_build_stats (boolean) #

如果設定,則記錄各種 B 樹操作的系統資源使用情況統計資訊(記憶體和 CPU)。

僅當在編譯 PostgreSQL 時定義了 BTREE_BUILD_STATS 巨集,此參數才可用。

wal_consistency_checking (string) #

此參數旨在用於檢查 WAL 重做常式中的錯誤。 啟用後,將與 WAL 記錄相關聯修改的任何緩衝區的完整頁面映像新增到記錄中。 如果隨後重播該記錄,系統將首先應用每個記錄,然後測試由該記錄修改的緩衝區是否與儲存的映像相符。 在某些情況下(例如提示位),可以接受微小的變化,並且將被忽略。 任何非預期的差異將導致致命錯誤,終止恢復。

此設定的預設值為空字串,這會停用此功能。可以將其設定為 all 以檢查所有紀錄,或設定為以逗號分隔的資源管理器清單,僅檢查來自這些資源管理器的紀錄。目前,支援的資源管理器有 heapheap2btreehashgingistsequencespgistbringeneric。擴充功能可以定義額外的資源管理器。只有超級使用者和具有適當 SET 權限的使用者才能變更此設定。

wal_debug (boolean) #

如果啟用,則發出與 WAL 相關的除錯輸出。只有在編譯 PostgreSQL 時定義了 WAL_DEBUG 巨集,此參數才可用。

ignore_checksum_failure (boolean) #

只有在啟用 資料校驗和 時才有效。

在讀取期間偵測到校驗和失敗通常會導致 PostgreSQL 報告錯誤,中止目前的交易。將 ignore_checksum_failure 設定為 on 會導致系統忽略該失敗(但仍會報告警告),並繼續處理。這種行為可能會導致崩潰、傳播或隱藏損壞,或其他嚴重問題。但是,如果區塊標頭仍然正常,它可能會讓您通過錯誤並檢索表中可能仍然存在的未損壞的元組。如果標頭已損壞,即使啟用了此選項,也會報告錯誤。預設設定為 off。只有超級使用者和具有適當 SET 權限的使用者才能變更此設定。

zero_damaged_pages (boolean) #

偵測到損壞的頁面標頭通常會導致 PostgreSQL 報告錯誤,中止目前的交易。將 zero_damaged_pages 設定為 on 會導致系統改為報告警告,將記憶體中損壞的頁面歸零,並繼續處理。這種行為會破壞資料,即損壞頁面上的所有列。但是,它確實允許您通過錯誤並從表中可能存在的任何未損壞的頁面中檢索列。如果由於硬體或軟體錯誤而發生損壞,它對於恢復資料很有用。一般來說,您不應該在放棄從表的損壞頁面恢復資料的希望之前設定此選項。歸零的頁面不會強制寫入磁碟,因此建議在再次關閉此參數之前重新建立表或索引。預設設定為 off。只有超級使用者和具有適當 SET 權限的使用者才能變更此設定。

ignore_invalid_pages (boolean) #

如果設定為 off(預設值),在恢復期間偵測到 WAL 紀錄具有對無效頁面的引用會導致 PostgreSQL 產生 PANIC 等級的錯誤,中止恢復。將 ignore_invalid_pages 設定為 on 會導致系統忽略 WAL 紀錄中的無效頁面引用(但仍會報告警告),並繼續恢復。這種行為可能會導致崩潰、資料遺失、傳播或隱藏損壞,或其他嚴重問題。但是,它可能會讓您通過 PANIC 等級的錯誤,完成恢復,並導致伺服器啟動。此參數只能在伺服器啟動時設定。它僅在恢復或待命模式下有效。

jit_debugging_support (boolean) #

如果 LLVM 具有所需的功能,請將產生的函式註冊到 GDB。這使得除錯更容易。預設設定為 off。此參數只能在伺服器啟動時設定。

jit_dump_bitcode (boolean) #

將產生的 LLVM IR 寫出到檔案系統,位於 data_directory 中。這僅適用於處理 JIT 實現的內部結構。預設設定為 off。只有超級使用者和具有適當 SET 權限的使用者才能變更此設定。

jit_expressions (boolean) #

決定在啟用 JIT 編譯時,是否對表達式進行 JIT 編譯(請參閱 第 30.2 節)。預設值為 on

jit_profiling_support (boolean) #

如果 LLVM 具有所需的功能,則發出允許 perf 分析由 JIT 產生的函式所需的資料。這會將檔案寫入 ~/.debug/jit/;使用者負責在需要時執行清理。預設設定為 off。此參數只能在伺服器啟動時設定。

jit_tuple_deforming (boolean) #

決定在啟用 JIT 編譯時,是否對元組變形進行 JIT 編譯(請參閱 第 30.2 節)。預設值為 on

remove_temp_files_after_crash (boolean) #

當設定為 on(這是預設值)時,PostgreSQL 將在後端崩潰後自動移除暫存檔。如果停用,這些檔案將被保留,並且可以用於除錯等用途。但是,重複的崩潰可能會導致無用檔案的累積。此參數只能在 postgresql.conf 檔案中或伺服器命令列上設定。

send_abort_for_crash (boolean) #

預設情況下,在後端崩潰後,postmaster 會傳送 SIGQUIT 訊號來停止剩餘的子程序,使其能夠以或多或少優雅的方式退出。如果將此選項設定為 on,則會改為傳送 SIGABRT。通常這會導致為每個這樣的子程序生成核心傾印檔案 (core dump file)。這對於在崩潰後調查其他程序的狀態可能很有用。但是,如果重複崩潰,它也可能消耗大量磁碟空間,因此請不要在您未仔細監控的系統上啟用此選項。請注意,目前沒有自動清理核心檔案的支援。此參數只能在 postgresql.conf 檔案中或在伺服器命令行上設定。

send_abort_for_kill (boolean) #

預設情況下,在嘗試使用 SIGQUIT 停止子程序後,postmaster 將等待五秒鐘,然後傳送 SIGKILL 以強制立即終止。如果將此選項設定為 on,則會改為傳送 SIGABRT 而不是 SIGKILL。通常這會導致為每個這樣的子程序生成核心傾印檔案。這對於調查 卡住 的子程序的狀態可能很有用。但是,如果重複崩潰,它也可能消耗大量磁碟空間,因此請不要在您未仔細監控的系統上啟用此選項。請注意,目前沒有自動清理核心檔案的支援。此參數只能在 postgresql.conf 檔案中或在伺服器命令行上設定。

debug_logical_replication_streaming (enum) #

允許的值為 bufferedimmediate。預設值為 buffered。此參數旨在用於測試大型交易的邏輯解碼和複寫。debug_logical_replication_streaming 的效果對於發布者和訂閱者是不同的。

在發布者端,debug_logical_replication_streaming 允許在邏輯解碼中立即串流或序列化變更。如果設定為 immediate,如果啟用 streaming 選項的 CREATE SUBSCRIPTION,則串流每個變更,否則,序列化每個變更。如果設定為 buffered,則當達到 logical_decoding_work_mem 時,解碼將串流或序列化變更。

在訂閱者端,如果 streaming 選項設定為 parallel,則可以使用 debug_logical_replication_streaming 來指示 leader apply worker 將變更傳送到共享記憶體佇列或將所有變更序列化到檔案。如果設定為 buffered,leader 會透過共享記憶體佇列將變更傳送到平行套用 worker。如果設定為 immediate,leader 會將所有變更序列化到檔案,並通知平行套用 worker 在交易結束時讀取和套用它們。

提交更正

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