2025年9月25日: PostgreSQL 18 釋出!
支援的版本:當前18) / 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) #

當為 CREATE TABLESPACE 命令提供空位置字串時,允許將表空間建立為 pg_tblspc 目錄中的目錄。這旨在允許測試主伺服器和備用伺服器執行在同一臺機器上的複製場景。此類目錄可能會混淆期望在該位置僅找到符號連結的備份工具。只有超級使用者和具有適當 SET 許可權的使用者才能更改此設定。

allow_system_table_mods (boolean) #

允許修改系統表的結構以及對系統表的其他一些危險操作。否則,即使是超級使用者也不能執行這些操作。錯誤地使用此設定可能導致不可挽回的資料丟失或嚴重損壞資料庫系統。只有超級使用者和具有適當 SET 許可權的使用者才能更改此設定。

backtrace_functions (string) #

此引數包含一個以逗號分隔的 C 函式名稱列表。如果引發錯誤,並且錯誤發生處的內部 C 函式名稱與列表中的某個值匹配,則除了錯誤訊息外,還會將堆疊跟蹤寫入伺服器日誌。這可用於除錯原始碼的特定區域。

並非所有平臺都支援堆疊跟蹤,並且堆疊跟蹤的質量取決於編譯選項。

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

debug_copy_parse_plan_trees (boolean) #

啟用此選項會強制所有解析樹和計劃樹透過 copyObject() 進行處理,以方便捕獲 copyObject() 中的錯誤和遺漏。預設為關閉。

此引數僅在編譯時定義了 DEBUG_NODE_TESTS_ENABLED(使用 configure 選項 --enable-cassert 時會自動發生)時可用。

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 輸出中是隱藏的,以便輸出與將此設定關閉時獲得的內容相匹配。

debug_raw_expression_coverage_test (boolean) #

啟用此選項會強制 DML 語句的所有原始解析樹由 raw_expression_tree_walker() 掃描,以方便捕獲該函式中的錯誤和遺漏。預設為關閉。

此引數僅在編譯時定義了 DEBUG_NODE_TESTS_ENABLED(使用 configure 選項 --enable-cassert 時會自動發生)時可用。

debug_write_read_parse_plan_trees (boolean) #

啟用此選項會強制所有解析樹和計劃樹透過 outfuncs.c/readfuncs.c 進行處理,以方便捕獲這些模組中的錯誤和遺漏。預設為關閉。

此引數僅在編譯時定義了 DEBUG_NODE_TESTS_ENABLED(使用 configure 選項 --enable-cassert 時會自動發生)時可用。

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) #

如果開啟,則發出有關排序操作期間資源使用情況的資訊。

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

如果 LOCK_DEBUG 宏在編譯 PostgreSQL 時被定義,則此引數可用。

trace_lwlocks (boolean) #

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

如果 LOCK_DEBUG 宏在編譯 PostgreSQL 時被定義,則此引數可用。

trace_userlocks (boolean) #

如果開啟,則發出有關使用者鎖使用情況的資訊。輸出與 trace_locks 相同,僅針對通知鎖。

如果 LOCK_DEBUG 宏在編譯 PostgreSQL 時被定義,則此引數可用。

trace_lock_oidmin (integer) #

如果設定,則不跟蹤小於此 OID 的表上的鎖(用於避免在系統表上輸出)。

如果 LOCK_DEBUG 宏在編譯 PostgreSQL 時被定義,則此引數可用。

trace_lock_table (integer) #

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

如果 LOCK_DEBUG 宏在編譯 PostgreSQL 時被定義,則此引數可用。

debug_deadlocks (boolean) #

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

如果 LOCK_DEBUG 宏在編譯 PostgreSQL 時被定義,則此引數可用。

log_btree_build_stats (boolean) #

如果設定,則記錄 B-tree 操作期間的系統資源使用統計資訊(記憶體和 CPU)。

如果 BTREE_BUILD_STATS 宏在編譯 PostgreSQL 時被定義,則此引數可用。

wal_consistency_checking (string) #

此引數旨在用於檢查 WAL 重做例程中的錯誤。啟用後,修改 WAL 記錄的任何緩衝區的全頁映像將新增到記錄中。如果隨後重放記錄,系統將首先應用每個記錄,然後測試由記錄修改的緩衝區是否與儲存的映像匹配。在某些情況下(例如,提示位),細微的差異是可以接受的,並且將被忽略。任何意外的差異都將導致致命錯誤,終止恢復。

此設定的預設值是空字串,這會停用該功能。它可以設定為 all 以檢查所有記錄,或設定為一個逗號分隔的資源管理器列表,僅檢查來自這些資源管理器的記錄。當前支援的資源管理器是 heapheap2btreehashgingistsequencespgistbringeneric。擴充套件程式可以定義額外的資源管理器。只有超級使用者和具有適當 SET 許可權的使用者才能更改此設定。

wal_debug (boolean) #

如果開啟,則發出與 WAL 相關的除錯輸出。如果 WAL_DEBUG 宏在編譯 PostgreSQL 時被定義,則此引數可用。

ignore_checksum_failure (boolean) #

僅當啟用了 -k 時才有效。

讀取過程中檢測到校驗和失敗時,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) #

預設情況下,在後端崩潰後,主程序將透過傳送 SIGQUIT 訊號來停止剩餘的子程序,這允許它們或多或少正常退出。當此選項設定為 on 時,將傳送 SIGABRT。這通常會導致為每個此類子程序生成一個核心轉儲檔案。這對於在崩潰後檢查其他程序的狀態非常有用。在反覆崩潰的情況下,它還可能佔用大量磁碟空間,因此請勿在未仔細監控的系統上啟用此選項。請注意,沒有自動清理核心檔案的支援。此引數只能在 postgresql.conf 檔案或伺服器命令列中設定。

send_abort_for_kill (boolean) #

預設情況下,在嘗試使用 SIGQUIT 停止子程序後,主程序將等待五秒鐘,然後傳送 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 可用於指示主應用工作程序將更改傳送到共享記憶體佇列或將所有更改序列化到檔案。當設定為 buffered 時,主程序透過共享記憶體佇列將更改傳送到並行應用工作程序。當設定為 immediate 時,主程序將所有更改序列化到檔案,並通知並行應用工作程序在事務結束時讀取並應用它們。

提交更正

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