pg_settings視圖提供了對伺服器上運行時參數的訪問。
簡介
pg_settings本質上是SHOW和SET命令的可替換介面。它還提供了SHOW不能提供的關於每一個參數的一些資訊,例如,最大值和最小值。
pg_settings視圖包含以下列資訊:
列名稱 | 類型 | 描述 |
name | text | 運行時配置的參數名。 |
setting | text | 參數的當前值。 |
unit | text | 參數的隱式單元。 |
category | text | 參數的邏輯組。 |
short_desc | text | 參數的短描述。 |
extra_desc | text | 附加的參數的詳細描述。 |
context | text | 設定此參數值的上下文。 |
vartype | text | 參數類型,取值包括: |
source | text | 當前參數值的來源。 |
min_val | text | 參數的最小允許值(對非數字值為空白)。 |
max_val | text | 參數的最大允許值(對非數字值為空白)。 |
enumvals | text[] | 一個枚舉參數的允許值(對非數字值為空白)。 |
boot_val | text | 如果參數沒有進行其他設定,此列為在伺服器啟動時設定的參數值。 |
reset_val | text | 在當前會話中, |
sourcefile | text | 當前值被設定的設定檔(空值表示從非設定檔的其他來源設定,不是超級使用者也不是 |
sourceline | int4 | 當前值被設定的設定檔中的行號(空值表示從非設定檔的其他來源設定,不是超級使用者也不是 |
pending_restart | bool | 如果設定檔中修改了該值但需要重啟,則為 |
對於context有多種可能的取值,取值如下:
internal:這些設定不能被直接修改,它們反映了內部決定的值。某些可能在使用不同配置選項重建系統時或者改變initdb的選項時可以調整。postmaster:這些設定只能在伺服器啟動時應用,因此任何修改都需要重啟伺服器。這些設定的值通常都儲存在postgresql.conf檔案中,或者在啟動伺服器時通過命令列傳遞。具有更低context類型的設定也可以在伺服器啟動時間被設定。sighup:對於這些設定的修改可以在postgresql.conf中完成並且不需要重啟伺服器。發送一個SIGHUP訊號給postmaster會導致它重新讀取postgresql.conf並應用修改。Postmaster將會把SIGHUP訊號傳遞給它的子進程,這樣它們也會獲得新的值。superuser-backend:對於這些設定的更改可以在postgresql.conf中進行而無需重啟伺服器。也可以在串連請求包(例如,通過libpq的PGOPTIONS環境變數)中為一個特定的會話設定它們,但是只有在串連使用者是超級使用者時才能操作。如果在會話啟動後這些設定就不會改變。如果在postgresql.conf改變了它們, 向postmaster發送一個SIGHUP訊號讓postmaster重新讀取postgresql.conf。新的值將只會影響後續啟動的會話。backend:對於這些設定的修改可以在postgresql.conf中完成並且不需要重啟伺服器。它們也可以在一個串連請求包(例如,通過libpq的PGOPTIONS環境變數)中為一個特定會話設定 ,任何使用者都可以為這個會話做這種修改。然而,這些設定在會話啟動後不會發生變化。如果在postgresql.conf中修改它們,可以向postmaster發送一個SIGHUP訊號讓它重讀postgresql.conf。新值只會影響後續啟動的會話。superuser:這些設定可以從postgresql.conf設定,或者在會話中用SET命令設定。僅當沒有通過SET設定會話本地值時,postgresql.conf中的改變才會影響現有的會話。user:這些設定可以從postgresql.conf設定,或者在會話中用SET命令設定。任何使用者都被允許修改它們的會話本地值。僅當沒有通過SET設定會話本地值時,postgresql.conf中的改變才會影響現有的會話。
pg_settings視圖不能被插入或者從中刪除,但是可以被更新。在pg_settings的一行上的一個UPDATE等價於在該參數上執行一個SET命令。修改將只會影響當前會話使用的值。如果一個UPDATE在一個後來中斷的事務中被發出,UPDATE命令的效果也會隨著事務的復原而消失。一旦所在的事務被提交,效果將一直保持到會話結束,除非有其他UPDATE或SET重新修改它。