支援的版本:目前 (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 / 8.0

9.27. 系統資訊函數和運算符 #

本節描述的函數用於取得關於 PostgreSQL 安裝的各種資訊。

9.27.1. 會話資訊函數 #

表 9.69 顯示了幾個提取會話和系統資訊的函數。

除了本節列出的函數外,還有許多與統計系統相關的函數也提供系統資訊。 參見 第 27.2.26 節 以取得更多資訊。

表 9.69. 會話資訊函數

函數

描述

current_catalogname

current_database () → name

回傳目前資料庫的名稱。(在 SQL 標準中,資料庫被稱為「目錄」,因此 current_catalog 是標準的拼寫方式。)

current_query () → text

回傳目前正在執行的查詢的文字,由客戶端提交(可能包含多個語句)。

current_rolename

這相當於 current_user

current_schemaname

current_schema () → name

回傳搜尋路徑中第一個結構描述的名稱(如果搜尋路徑為空,則回傳空值)。 這是將用於建立任何未指定目標結構描述的表格或其他命名物件的結構描述。

current_schemas ( include_implicit boolean ) → name[]

依優先順序回傳目前有效搜尋路徑中所有結構描述名稱的陣列。(目前的 search_path 設定中,與現有、可搜尋的結構描述不符的項目會被省略。)如果布林參數為 true,則隱式搜尋的系統結構描述(例如 pg_catalog)會包含在結果中。

current_username

回傳目前執行內容的使用者名稱。

inet_client_addr () → inet

回傳目前客戶端的 IP 位址,如果目前連線透過 Unix 網域套接字,則回傳 NULL

inet_client_port () → integer

傳回目前用戶端的 IP 埠號,如果目前的連線是透過 Unix 網域 socket,則傳回 NULL

inet_server_addr () → inet

傳回伺服器接受目前連線的 IP 位址,如果目前的連線是透過 Unix 網域 socket,則傳回 NULL

inet_server_port () → integer

傳回伺服器接受目前連線的 IP 埠號,如果目前的連線是透過 Unix 網域 socket,則傳回 NULL

pg_backend_pid () → integer

傳回附加到目前會話的伺服器程序的程序 ID。

pg_blocking_pids ( integer ) → integer[]

傳回一個陣列,其中包含阻止具有指定程序 ID 的伺服器程序取得鎖定的會話的程序 ID。如果沒有這樣的伺服器程序或它未被阻止,則傳回一個空陣列。

如果一個伺服器程序持有的鎖與被阻止程序的鎖定請求衝突(硬性阻止),或者正在等待與被阻止程序的鎖定請求衝突且在等待隊列中位於其之前的鎖(軟性阻止),則它會阻止另一個伺服器程序。 使用平行查詢時,結果總是列出客戶端可見的程序 ID(即,pg_backend_pid 結果),即使實際的鎖由子 worker 程序持有或等待。 因此,結果中可能存在重複的 PID。 另請注意,當預備交易持有衝突鎖時,它將由零程序 ID 表示。

頻繁呼叫此函數可能會對資料庫效能產生一些影響,因為它需要在短時間內獨佔訪問鎖定管理員的共享狀態。

pg_conf_load_time () → timestamp with time zone

傳回伺服器組態檔案上次載入的時間。 如果目前的會話當時處於活動狀態,則這將是會話本身重新讀取組態檔案的時間(因此,不同會話的讀取會略有不同)。 否則,它是 postmaster 程序重新讀取組態檔案的時間。

pg_current_logfile ( [ text ] ) → text

傳回目前由日誌收集器使用的日誌檔的路徑名稱。 該路徑包含 log_directory 目錄和個別日誌檔名。 如果日誌收集器已停用,則結果為 NULL。 當存在多個日誌檔案,每個檔案使用不同的格式時,不帶引數的 pg_current_logfile 會傳回檔案的路徑,該檔案在排序的清單中具有第一個找到的格式: stderrcsvlogjsonlog。 如果沒有任何日誌檔案具有這些格式,則傳回 NULL。 若要請求有關特定日誌檔案格式的資訊,請提供 csvlogjsonlogstderr 作為選用參數的值。 如果請求的日誌格式未在 log_destination 中配置,則結果為 NULL。 結果反映 current_logfiles 檔案的內容。

預設情況下,此函數僅限於超級使用者和具有 pg_monitor 角色權限的角色,但可以授予其他使用者 EXECUTE 權限來執行該函數。

pg_my_temp_schema () → oid

傳回目前會話的暫存綱要的 OID,如果它沒有暫存綱要(因為它沒有建立任何暫存表格),則傳回零。

pg_is_other_temp_schema ( oid ) → boolean

如果給定的 OID 是另一個會話的暫存綱要的 OID,則傳回 true。(例如,這可用於將其他會話的暫存表格從目錄顯示中排除。)

pg_jit_available () → boolean

如果JIT編譯器擴充功能可用(請參閱第 30 章)並且 jit 組態參數設定為 on,則傳回 true。

pg_listening_channels () → setof text

傳回目前會話正在監聽的非同步通知通道的名稱集。

pg_notification_queue_usage () → double precision

傳回目前由等待處理的通知佔用的非同步通知佇列最大大小的比例 (0–1)。 有關更多資訊,請參閱 LISTENNOTIFY

pg_postmaster_start_time () → timestamp with time zone

傳回伺服器啟動的時間。

pg_safe_snapshot_blocking_pids ( integer ) → integer[]

傳回一個陣列,其中包含阻止具有指定程序 ID 的伺服器程序取得安全快照的會話的程序 ID。如果沒有這樣的伺服器程序或它未被阻止,則傳回一個空陣列。

執行 SERIALIZABLE 交易的會話會阻止 SERIALIZABLE READ ONLY DEFERRABLE 交易獲取快照,直到後者確定可以安全地避免取得任何謂詞鎖定。有關可序列化和可延遲交易的更多資訊,請參閱第 13.2.3 節

頻繁呼叫此函式可能會對資料庫效能產生一些影響,因為它需要在短時間內存取謂詞鎖定管理器的共享狀態。

pg_trigger_depth () → integer

傳回 PostgreSQL 觸發器的目前巢狀層級(如果不是從觸發器內部直接或間接呼叫,則為 0)。

session_username

傳回會話使用者的名稱。

system_usertext

傳回驗證方法以及使用者在被分配資料庫角色之前,在驗證週期中提供的身分(如果有的話)。它表示為 auth_method:identity,如果使用者尚未通過驗證,則表示為 NULL(例如,如果使用了信任驗證)。

username

這相當於 current_user


注意

current_catalogcurrent_rolecurrent_schemacurrent_usersession_useruserSQL中具有特殊的語法狀態:必須在沒有尾隨括號的情況下呼叫它們。在 PostgreSQL 中,括號可以選擇性地與 current_schema 一起使用,但不能與其他函式一起使用。

session_user 通常是啟動目前資料庫連線的使用者;但超級使用者可以使用 SET SESSION AUTHORIZATION 變更此設定。current_user 是適用於權限檢查的使用者識別碼。通常它等於會話使用者,但可以使用 SET ROLE 變更。它也會在使用 SECURITY DEFINER 屬性的函式執行期間變更。用 Unix 術語來說,會話使用者是「真實使用者」,目前使用者是「有效使用者」。current_roleusercurrent_user 的同義詞。(SQL 標準區分 current_rolecurrent_user,但 PostgreSQL 沒有,因為它將使用者和角色合併為單一種類的實體。)

9.27.2. 存取權限查詢函式 #

表 9.70 列出了允許以程式方式查詢物件存取權限的函式。(有關權限的更多資訊,請參閱第 5.8 節。)在這些函式中,要查詢其權限的使用者可以通過名稱或 OID(pg_authid.oid)指定,或者如果將名稱指定為 public,則會檢查 PUBLIC 偽角色的權限。此外,user 參數可以完全省略,在這種情況下,會假設為 current_user。要查詢的物件也可以通過名稱或 OID 指定。通過名稱指定時,如果相關,可以包含結構描述名稱。感興趣的存取權限由文字字串指定,該字串必須評估為物件類型適用的權限關鍵字之一(例如,SELECT)。或者,可以在權限類型中新增 WITH GRANT OPTION,以測試是否持有具有授與選項的權限。此外,可以列出由逗號分隔的多個權限類型,在這種情況下,如果持有任何列出的權限,結果將為 true。(權限字串的大小寫不重要,並且權限名稱之間允許有多餘的空白。)一些範例

SELECT has_table_privilege('myschema.mytable', 'select');
SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');

表 9.70. 存取權限查詢函式

函數

描述

has_any_column_privilege ( [ user nameoid, ] table textoid, privilege text ) → boolean

使用者是否具有表格任何欄位的權限?如果持有整個表格的權限,或者至少有一個欄位具有欄位級別的權限授與,則此操作成功。允許的權限類型為 SELECTINSERTUPDATEREFERENCES

has_column_privilege ( [ user nameoid, ] table textoid, column textsmallint, privilege text ) → boolean

使用者是否具有指定表格欄位的權限?如果持有整個表格的權限,或者該欄位具有欄位級別的權限授與,則此操作成功。可以通過名稱或屬性編號(pg_attribute.attnum)指定欄位。允許的權限類型為 SELECTINSERTUPDATEREFERENCES

has_database_privilege ( [ user nameoid, ] database textoid, privilege text ) → boolean

使用者是否具有資料庫的權限?允許的權限類型為 CREATECONNECTTEMPORARYTEMP(等同於 TEMPORARY)。

has_foreign_data_wrapper_privilege ( [ user nameoid, ] fdw textoid, privilege text ) → boolean

使用者是否擁有外部資料包裝器的權限?唯一允許的權限類型為 USAGE

has_function_privilege ( [ user name or oid, ] function text or oid, privilege text ) → boolean

使用者是否擁有函式的權限?唯一允許的權限類型為 EXECUTE

當使用名稱而不是 OID 指定函式時,允許的輸入與 regprocedure 資料類型相同(請參閱第 8.19 節)。一個例子是

SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');

has_language_privilege ( [ user name or oid, ] language text or oid, privilege text ) → boolean

使用者是否擁有語言的權限?唯一允許的權限類型為 USAGE

has_parameter_privilege ( [ user name or oid, ] parameter text, privilege text ) → boolean

使用者是否擁有組態參數的權限?參數名稱不區分大小寫。允許的權限類型為 SETALTER SYSTEM

has_schema_privilege ( [ user name or oid, ] schema text or oid, privilege text ) → boolean

使用者是否擁有綱要的權限?允許的權限類型為 CREATEUSAGE

has_sequence_privilege ( [ user name or oid, ] sequence text or oid, privilege text ) → boolean

使用者是否擁有序列的權限?允許的權限類型為 USAGESELECTUPDATE

has_server_privilege ( [ user name or oid, ] server text or oid, privilege text ) → boolean

使用者是否擁有外部伺服器的權限?唯一允許的權限類型為 USAGE

has_table_privilege ( [ user name or oid, ] table text or oid, privilege text ) → boolean

使用者是否擁有表格的權限?允許的權限類型為 SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERMAINTAIN

has_tablespace_privilege ( [ user name or oid, ] tablespace text or oid, privilege text ) → boolean

使用者是否擁有表空間的權限?唯一允許的權限類型為 CREATE

has_type_privilege ( [ user name or oid, ] type text or oid, privilege text ) → boolean

使用者是否擁有資料類型的權限?唯一允許的權限類型為 USAGE。當使用名稱而不是 OID 指定類型時,允許的輸入與 regtype 資料類型相同(請參閱第 8.19 節)。

pg_has_role ( [ user name or oid, ] role text or oid, privilege text ) → boolean

使用者是否擁有角色的權限?允許的權限類型為 MEMBERUSAGESETMEMBER 表示直接或間接的角色成員資格,不考慮可能授予哪些特定權限。USAGE 表示角色的權限是否可立即使用,而無需執行 SET ROLE,而 SET 表示是否可以使用 SET ROLE 指令變更為該角色。WITH ADMIN OPTIONWITH GRANT OPTION 可以新增至任何這些權限類型,以測試是否持有 ADMIN 權限(所有六種拼寫方式都測試相同的內容)。此函式不允許將 user 設定為 public 的特殊情況,因為 PUBLIC 偽角色永遠不能成為真實角色的成員。

row_security_active ( table text or oid ) → boolean

在目前的使用者和目前的環境背景下,是否針對指定的表格啟用了資料列層級安全性?


表 9.71 顯示了 aclitem 類型可用的運算子,它是存取權限的目錄表示。請參閱第 5.8 節,以瞭解如何讀取存取權限值。

表 9.71. aclitem 運算子

運算子

描述

範例

aclitem = aclitemboolean

aclitem 是否相等?(請注意,類型 aclitem 缺少常用的比較運算子集合;它只有相等性。反過來說,aclitem 陣列只能比較是否相等。)

'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitemf

aclitem[] @> aclitemboolean

陣列是否包含指定的權限? (如果陣列中有一個項目符合 aclitem 的被授權者和授權者,並且至少具有指定的權限集,則為 true。)

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitemt

aclitem[] ~ aclitemboolean

這是 @> 的已棄用別名。

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitemt


表 9.72 顯示了一些額外的函式來管理 aclitem 類型。

表 9.72. aclitem 函式

函數

描述

acldefault ( type "char", ownerId oid ) → aclitem[]

建構一個 aclitem 陣列,其中包含屬於具有 OID ownerId 的角色的類型 type 的物件的預設存取權限。 這表示物件的 ACL 項目為 null 時將假定的存取權限。(預設存取權限在第 5.8 節中進行了描述。)type 參數必須是 'c' 代表 COLUMN、'r' 代表 TABLE 和類似表的物件、's' 代表 SEQUENCE、'd' 代表 DATABASE、'f' 代表 FUNCTIONPROCEDURE、'l' 代表 LANGUAGE、'L' 代表 LARGE OBJECT、'n' 代表 SCHEMA、'p' 代表 PARAMETER、't' 代表 TABLESPACE、'F' 代表 FOREIGN DATA WRAPPER、'S' 代表 FOREIGN SERVER 或 'T' 代表 TYPEDOMAIN 之一。

aclexplode ( aclitem[] ) → setof record ( grantor oid, grantee oid, privilege_type text, is_grantable boolean )

aclitem 陣列作為一組列回傳。 如果被授權者是虛擬角色 PUBLIC,則它在 grantee 欄中以零表示。 每個授予的權限都表示為 SELECTINSERT 等(有關完整清單,請參閱表 5.1)。 請注意,每個權限都會被分解為單獨的列,因此在 privilege_type 欄中僅顯示一個關鍵字。

makeaclitem ( grantee oid, grantor oid, privileges text, is_grantable boolean ) → aclitem

使用給定的屬性建構一個 aclitemprivileges 是一個以逗號分隔的權限名稱清單,例如 SELECTINSERT 等,所有這些都在結果中設定。(權限字串的大小寫不重要,並且允許在權限名稱之間但不在權限名稱內使用額外的空白。)


9.27.3. 結構描述可見性查詢函式 #

表 9.73 顯示了確定某個物件在目前結構描述搜尋路徑中是否可見的函式。 例如,如果表格的包含結構描述在搜尋路徑中,並且沒有同名的表格出現在搜尋路徑的較早位置,則該表格被認為是可見的。 這等同於該表格可以透過名稱引用而無需明確的結構描述限定的陳述。 因此,若要列出所有可見表格的名稱

SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);

對於函式和運算子,如果路徑中較早沒有具有相同名稱和引數資料類型的物件,則搜尋路徑中的物件被認為是可見的。 對於運算子類別和系列,會考慮名稱和相關的索引存取方法。

表 9.73. 結構描述可見性查詢函式

函數

描述

pg_collation_is_visible ( collation oid ) → boolean

定序在搜尋路徑中是否可見?

pg_conversion_is_visible ( conversion oid ) → boolean

轉換在搜尋路徑中是否可見?

pg_function_is_visible ( function oid ) → boolean

函式在搜尋路徑中是否可見? (這也適用於程序和聚合函式。)

pg_opclass_is_visible ( opclass oid ) → boolean

運算子類別在搜尋路徑中是否可見?

pg_operator_is_visible ( operator oid ) → boolean

運算子在搜尋路徑中是否可見?

pg_opfamily_is_visible ( opclass oid ) → boolean

運算子系列在搜尋路徑中是否可見?

pg_statistics_obj_is_visible ( stat oid ) → boolean

統計物件在搜尋路徑中是否可見?

pg_table_is_visible ( table oid ) → boolean

表格在搜尋路徑中是否可見? (這適用於所有類型的關聯,包括檢視表、具體化檢視表、索引、序列和外部表格。)

pg_ts_config_is_visible ( config oid ) → boolean

文字搜尋設定在搜尋路徑中是否可見?

pg_ts_dict_is_visible ( dict oid ) → boolean

文字搜尋字典在搜尋路徑中是否可見?

pg_ts_parser_is_visible ( parser oid ) → boolean

文字搜尋剖析器在搜尋路徑中是否可見?

pg_ts_template_is_visible ( template oid ) → boolean

文字搜尋樣板在搜尋路徑中是否可見?

pg_type_is_visible ( type oid ) → boolean

類型(或領域)在搜尋路徑中是否可見?


所有這些函數都需要物件 OID 來識別要檢查的物件。 如果你想按名稱測試物件,使用 OID 別名類型(regclassregtyperegprocedureregoperatorregconfigregdictionary)會很方便,例如

SELECT pg_type_is_visible('myschema.widget'::regtype);

請注意,以這種方式測試非 schema 限定的類型名稱沒有太大的意義 — 如果該名稱可以被識別,那它一定是可見的。

9.27.4. 系統目錄資訊函數 #

表 9.74 列出了從系統目錄中提取資訊的函數。

表 9.74. 系統目錄資訊函數

函數

描述

format_type ( type oid, typemod integer ) → text

傳回由其類型 OID 和可能的類型修飾符識別的資料類型之 SQL 名稱。 如果不知道特定的修飾符,則傳遞 NULL 作為類型修飾符。

pg_basetype ( regtype ) → regtype

傳回由其類型 OID 識別的領域之基本類型的 OID。 如果參數是非領域類型的 OID,則按原樣傳回該參數。 如果參數不是有效的類型 OID,則傳回 NULL。 如果存在領域依賴關係鏈,它將遞迴直到找到基本類型。

假設 CREATE DOMAIN mytext AS text

pg_basetype('mytext'::regtype)text

pg_char_to_encoding ( encoding name ) → integer

將提供的編碼名稱轉換為表示某些系統目錄表中使用的內部識別碼的整數。 如果提供了未知的編碼名稱,則傳回 -1

pg_encoding_to_char ( encoding integer ) → name

將用作某些系統目錄表中編碼的內部識別碼的整數轉換為人類可讀的字串。 如果提供了無效的編碼號碼,則傳回空字串。

pg_get_catalog_foreign_keys () → setof record ( fktable regclass, fkcols text[], pktable regclass, pkcols text[], is_array boolean, is_opt boolean )

傳回一組描述在 PostgreSQL 系統目錄中存在的外鍵關係的記錄。fktable 欄位包含參照目錄的名稱,而 fkcols 欄位包含參照欄位的名稱。 同樣,pktable 欄位包含被參照目錄的名稱,而 pkcols 欄位包含被參照欄位的名稱。 如果 is_array 為 true,則最後一個參照欄位是一個陣列,其每個元素都應符合被參照目錄中的某些條目。 如果 is_opt 為 true,則允許參照欄位包含零而不是有效的參照。

pg_get_constraintdef ( constraint oid [, pretty boolean ] ) → text

重新建構約束的建立命令。 (這是一個反編譯的重建,不是命令的原始文字。)

pg_get_expr ( expr pg_node_tree, relation oid [, pretty boolean ] ) → text

反編譯儲存在系統目錄中的表達式的內部形式,例如欄位的預設值。 如果表達式可能包含 Vars,則指定它們所參照的關係的 OID 作為第二個參數; 如果不預期有 Vars,則傳遞零就足夠了。

pg_get_functiondef ( func oid ) → text

重新建構函數或程序的建立命令。 (這是一個反編譯的重建,不是命令的原始文字。) 結果是一個完整的 CREATE OR REPLACE FUNCTIONCREATE OR REPLACE PROCEDURE 語句。

pg_get_function_arguments ( func oid ) → text

重新建構函數或程序的參數列表,以它需要在 CREATE FUNCTION 中顯示的形式(包括預設值)。

pg_get_function_identity_arguments ( func oid ) → text

重新建構識別函數或程序所需的參數列表,以它需要在諸如 ALTER FUNCTION 之類的命令中顯示的形式。 此形式省略了預設值。

pg_get_function_result ( func oid ) → text

重新建構函數的 RETURNS 子句,以它需要在 CREATE FUNCTION 中顯示的形式。 對於程序,傳回 NULL

pg_get_indexdef ( index oid [, column integer, pretty boolean ] ) → text

重建索引的建立指令。(這是一個反編譯的重建結果,不是指令的原始文字。)如果提供了 column 且不為零,則僅重建該欄位的定義。

pg_get_keywords () → setof record ( word text, catcode "char", barelabel boolean, catdesc text, baredesc text )

傳回一組描述伺服器所識別的 SQL 關鍵字的紀錄。word 欄位包含關鍵字。catcode 欄位包含類別代碼:U 代表未保留的關鍵字,C 代表可以作為欄位名稱的關鍵字,T 代表可以作為類型或函式名稱的關鍵字,或 R 代表完全保留的關鍵字。barelabel 欄位包含 true,如果關鍵字可以用作 SELECT 清單中的欄位標籤,或 false,如果它只能在 AS 之後使用。catdesc 欄位包含描述關鍵字類別的可能已本地化的字串。baredesc 欄位包含描述關鍵字欄位標籤狀態的可能已本地化的字串。

pg_get_partkeydef ( table oid ) → text

CREATE TABLEPARTITION BY 子句中的形式,重建分割表格的分割區鍵的定義。(這是一個反編譯的重建結果,不是指令的原始文字。)

pg_get_ruledef ( rule oid [, pretty boolean ] ) → text

重建規則的建立指令。(這是一個反編譯的重建結果,不是指令的原始文字。)

pg_get_serial_sequence ( table text, column text ) → text

傳回與欄位相關聯的序列名稱,如果沒有與欄位相關聯的序列,則傳回 NULL。如果欄位是識別欄位,則關聯的序列是內部為該欄位建立的序列。對於使用其中一種序列類型(serialsmallserialbigserial)建立的欄位,它是為該序列欄位定義建立的序列。在後一種情況下,可以使用 ALTER SEQUENCE OWNED BY 修改或移除關聯。(此函式可能應該稱為 pg_get_owned_sequence;其目前的名稱反映了它在歷史上一直與序列類型欄位一起使用的事實。)第一個參數是具有可選結構描述的表格名稱,第二個參數是欄位名稱。由於第一個參數可能同時包含結構描述和表格名稱,因此它會根據常見的 SQL 規則進行剖析,這意味著預設情況下會將其轉換為小寫。第二個參數僅僅是一個欄位名稱,因此被視為字面意義,因此保留其大小寫。結果的格式適合傳遞給序列函式(請參閱第 9.17 節)。

一個典型的用法是讀取識別欄位或序列欄位的序列的目前值,例如

SELECT currval(pg_get_serial_sequence('sometable', 'id'));

pg_get_statisticsobjdef ( statobj oid ) → text

重建擴充統計物件的建立指令。(這是一個反編譯的重建結果,不是指令的原始文字。)

pg_get_triggerdef ( trigger oid [, pretty boolean ] ) → text

重建觸發器的建立指令。(這是一個反編譯的重建結果,不是指令的原始文字。)

pg_get_userbyid ( role oid ) → name

傳回給定 OID 的角色的名稱。

pg_get_viewdef ( view oid [, pretty boolean ] ) → text

重建檢視表或實體化檢視表的底層 SELECT 指令。(這是一個反編譯的重建結果,不是指令的原始文字。)

pg_get_viewdef ( view oid, wrap_column integer ) → text

重建檢視表或實體化檢視表的底層 SELECT 指令。(這是一個反編譯的重建結果,不是指令的原始文字。) 在此函式形式中,始終啟用美化列印,並且會包裝長行以嘗試使其短於指定的欄位數。

pg_get_viewdef ( view text [, pretty boolean ] ) → text

從檢視表的文字名稱而不是其 OID 重建檢視表或實體化檢視表的底層 SELECT 指令。(不建議使用;請改用 OID 變體。)

pg_index_column_has_property ( index regclass, column integer, property text ) → boolean

測試索引欄位是否具有指定的屬性。常見的索引欄位屬性列於表 9.75。(請注意,擴充存取方法可以為其索引定義其他屬性名稱。)如果屬性名稱未知或不適用於特定物件,或者 OID 或欄位編號未識別有效的物件,則傳回 NULL

pg_index_has_property ( index regclass, property text ) → boolean

測試索引是否具有指定的屬性。常見的索引屬性列於表 9.76。(請注意,擴充存取方法可以為其索引定義其他屬性名稱。)如果屬性名稱未知或不適用於特定物件,或者 OID 未識別有效的物件,則傳回 NULL

pg_indexam_has_property ( am oid, property text ) → boolean

測試索引存取方法是否具有指定的屬性。 存取方法屬性列在表 9.77。 如果屬性名稱未知或不適用於特定物件,或者 OID 未識別有效的物件,則會傳回 NULL

pg_options_to_table ( options_array text[] ) → setof record ( option_name text, option_value text )

傳回由 pg_class.reloptionspg_attribute.attoptions 的值所表示的儲存選項集合。

pg_settings_get_flags ( guc text ) → text[]

傳回與給定的 GUC 關聯的旗標陣列,如果 GUC 不存在則傳回 NULL。 如果 GUC 存在但沒有要顯示的旗標,則結果是一個空陣列。 只會顯示表 9.78中列出的最常用的旗標。

pg_tablespace_databases ( tablespace oid ) → setof oid

傳回在指定的表空間中儲存物件的資料庫的 OID 集合。 如果此函式傳回任何資料列,則表空間不是空的,無法刪除。 若要識別填充表空間的特定物件,您需要連線到 pg_tablespace_databases 識別的資料庫,並查詢其 pg_class 目錄。

pg_tablespace_location ( tablespace oid ) → text

傳回此表空間所在的檔案系統路徑。

pg_typeof ( "any" ) → regtype

傳回傳遞給它的值的資料類型 OID。 這對於疑難排解或動態建構 SQL 查詢很有幫助。 該函式宣告為傳回 regtype,它是 OID 別名類型(請參閱第 8.19 節);這表示在比較目的上它與 OID 相同,但顯示為類型名稱。

pg_typeof(33)integer

COLLATION FOR ( "any" ) → text

傳回傳遞給它的值的定序名稱。 必要時,該值會被引用並加上結構描述限定詞。 如果沒有為引數表達式衍生定序,則傳回 NULL。 如果引數不是可定序的資料類型,則會引發錯誤。

collation for ('foo'::text)"default"

collation for ('foo' COLLATE "de_DE")"de_DE"

to_regclass ( text ) → regclass

將文字關係名稱轉換為其 OID。 將字串強制轉型為 regclass 類型也會獲得類似的結果(請參閱第 8.19 節);但是,如果找不到名稱,此函式將傳回 NULL 而不是拋出錯誤。

to_regcollation ( text ) → regcollation

將文字定序名稱轉換為其 OID。 將字串強制轉型為 regcollation 類型也會獲得類似的結果(請參閱第 8.19 節);但是,如果找不到名稱,此函式將傳回 NULL 而不是拋出錯誤。

to_regnamespace ( text ) → regnamespace

將文字結構描述名稱轉換為其 OID。 將字串強制轉型為 regnamespace 類型也會獲得類似的結果(請參閱第 8.19 節);但是,如果找不到名稱,此函式將傳回 NULL 而不是拋出錯誤。

to_regoper ( text ) → regoper

將文字運算子名稱轉換為其 OID。 將字串強制轉型為 regoper 類型也會獲得類似的結果(請參閱第 8.19 節);但是,如果找不到名稱或不明確,此函式將傳回 NULL 而不是拋出錯誤。

to_regoperator ( text ) → regoperator

將文字運算子名稱(帶有參數類型)轉換為其 OID。 將字串強制轉型為 regoperator 類型也會獲得類似的結果(請參閱第 8.19 節);但是,如果找不到名稱,此函式將傳回 NULL 而不是拋出錯誤。

to_regproc ( text ) → regproc

將文字函式或程序名稱轉換為其 OID。 將字串強制轉型為 regproc 類型也會獲得類似的結果(請參閱第 8.19 節);但是,如果找不到名稱或不明確,此函式將傳回 NULL 而不是拋出錯誤。

to_regprocedure ( text ) → regprocedure

將文字函式或程序名稱(帶有引數類型)轉換為其 OID。 將字串強制轉型為 regprocedure 類型也會獲得類似的結果(請參閱第 8.19 節);但是,如果找不到名稱,此函式將傳回 NULL 而不是拋出錯誤。

to_regrole ( text ) → regrole

將文字角色名稱轉換為其 OID。將字串轉換為 regrole 型別也能得到類似的結果(請參閱第 8.19 節);但是,如果找不到名稱,此函式將傳回 NULL,而不是拋出錯誤。

to_regtype ( text ) → regtype

剖析文字字串,從中提取可能的型別名稱,並將該名稱轉換為型別 OID。字串中的語法錯誤將導致錯誤;但是,如果字串是語法上有效的型別名稱,但恰好在目錄中找不到,則結果為 NULL。將字串轉換為 regtype 型別也能得到類似的結果(請參閱第 8.19 節),但如果找不到名稱,則會拋出錯誤。

to_regtypemod ( text ) → integer

剖析文字字串,從中提取可能的型別名稱,並轉換其型別修飾詞(如果有的話)。字串中的語法錯誤將導致錯誤;但是,如果字串是語法上有效的型別名稱,但恰好在目錄中找不到,則結果為 NULL。如果沒有型別修飾詞,則結果為 -1

to_regtypemod 可以與 to_regtype 結合使用,以產生 format_type 的適當輸入,從而允許標準化表示型別名稱的字串。

format_type(to_regtype('varchar(32)'), to_regtypemod('varchar(32)'))character varying(32)


大多數重建(反編譯)資料庫物件的函式都有一個可選的 pretty 旗標,如果為 true,則會使結果美觀列印。美觀列印會抑制不必要的括號,並增加空白以提高可讀性。美觀列印的格式更易於閱讀,但預設格式更有可能被未來版本的 PostgreSQL 以相同的方式解譯;因此,避免將美觀列印的輸出用於傾印目的。將 false 傳遞給 pretty 參數會產生與省略參數相同的結果。

表 9.75. 索引欄位屬性

名稱 描述
asc 該欄位在正向掃描中是否以遞增順序排序?
desc 該欄位在正向掃描中是否以遞減順序排序?
nulls_first 該欄位在正向掃描中是否以 null 值優先排序?
nulls_last 該欄位在正向掃描中是否以 null 值最後排序?
orderable 該欄位是否具有任何定義的排序?
distance_orderable 是否可以按距離運算符,例如 ORDER BY col <-> constant,依順序掃描該欄位?
returnable 是否可以透過僅索引掃描傳回欄位值?
search_array 該欄位是否原生支援 col = ANY(array) 搜尋?
search_nulls 該欄位是否支援 IS NULLIS NOT NULL 搜尋?

表 9.76. 索引屬性

名稱 描述
clusterable 該索引是否可用於 CLUSTER 命令?
index_scan 該索引是否支援純(非點陣圖)掃描?
bitmap_scan 該索引是否支援點陣圖掃描?
backward_scan 是否可以在掃描中途更改掃描方向(以支援在不需要實體化的游標上使用 FETCH BACKWARD)?

表 9.77. 索引存取方法屬性

名稱 描述
can_order 存取方法是否支援 CREATE INDEX 中的 ASCDESC 和相關關鍵字?
can_unique 存取方法是否支援唯一索引?
can_multi_col 存取方法是否支援具有多個欄位的索引?
can_exclude 存取方法是否支援排除約束?
can_include 存取方法是否支援 CREATE INDEXINCLUDE 子句?

表 9.78. GUC 旗標

旗標 描述
EXPLAIN 具有此旗標的參數包含在 EXPLAIN (SETTINGS) 命令中。
NO_SHOW_ALL 具有此旗標的參數會從 SHOW ALL 命令中排除。
NO_RESET 具有此旗標的參數不支援 RESET 命令。
NO_RESET_ALL 具有此旗標的參數會從 RESET ALL 命令中排除。
NOT_IN_SAMPLE 預設情況下,具有此旗標的參數不會包含在 postgresql.conf 中。
RUNTIME_COMPUTED 具有此旗標的參數是執行階段計算的參數。

9.27.5. 物件資訊和定址函式 #

表 9.79 列出與資料庫物件識別和定址相關的函式。

表 9.79. 物件資訊和定址函式

函數

描述

pg_describe_object ( classid oid, objid oid, objsubid integer ) → text

傳回由目錄 OID、物件 OID 和子物件 ID(例如表格中的欄位編號;當參考整個物件時,子物件 ID 為零)識別的資料庫物件的文字描述。此描述旨在讓人易於閱讀,並且可能會根據伺服器配置進行翻譯。這對於確定 pg_depend 目錄中參考的物件的身份特別有用。此函式會為未定義的物件傳回 NULL 值。

pg_identify_object ( classid oid, objid oid, objsubid integer ) → record ( type text, schema text, name text, identity text )

傳回一個包含足夠資訊的資料列,以唯一識別由目錄 OID、物件 OID 和子物件 ID 指定的資料庫物件。此資訊旨在讓機器易於閱讀,並且永遠不會被翻譯。type 識別資料庫物件的類型;schema 是物件所屬的綱要名稱,對於不屬於綱要的物件類型,則為 NULLname 是物件的名稱,如果名稱(以及綱要名稱,如果相關)足以唯一識別物件,則必要時會加上引號,否則為 NULLidentity 是完整的物件身份,其精確格式取決於物件類型,並且格式中的每個名稱都經過綱要限定並加上必要的引號。未定義的物件以 NULL 值識別。

pg_identify_object_as_address ( classid oid, objid oid, objsubid integer ) → record ( type text, object_names text[], object_args text[] )

傳回一列,其中包含足夠的資訊來唯一識別由目錄 OID、物件 OID 和子物件 ID 所指定的資料庫物件。傳回的資訊與目前伺服器無關,也就是說,它可以被用來識別另一個伺服器中具有相同名稱的物件。type 識別資料庫物件的類型;object_namesobject_args 是文字陣列,它們共同構成對物件的參考。這三個值可以傳遞給 pg_get_object_address 以取得物件的內部位址。

pg_get_object_address ( type text, object_names text[], object_args text[] ) → record ( classid oid, objid oid, objsubid integer )

傳回一列,其中包含足夠的資訊來唯一識別由類型代碼和物件名稱與引數陣列所指定的資料庫物件。傳回的值是用於諸如 pg_depend 等系統目錄中的值;它們可以傳遞給其他系統函數,例如 pg_describe_objectpg_identify_objectclassid 是包含該物件的系統目錄的 OID;objid 是物件本身的 OID,而 objsubid 是子物件 ID,如果沒有則為零。此函數是 pg_identify_object_as_address 的反函數。未定義的物件會以 NULL 值識別。


9.27.6. 註解資訊函數 #

表 9.80 中顯示的函數提取先前使用 COMMENT 指令儲存的註解。如果找不到指定參數的註解,則會傳回空值。

表 9.80. 註解資訊函數

函數

描述

col_description ( table oid, column integer ) → text

傳回資料表欄位的註解,該欄位由其資料表的 OID 及其欄位編號指定。(obj_description 無法用於資料表欄位,因為欄位本身沒有 OID。)

obj_description ( object oid, catalog name ) → text

傳回由其 OID 和包含系統目錄的名稱所指定的資料庫物件的註解。例如,obj_description(123456, 'pg_class') 將檢索 OID 為 123456 的資料表的註解。

obj_description ( object oid ) → text

傳回僅由其 OID 指定的資料庫物件的註解。由於無法保證 OID 在不同的系統目錄中是唯一的,因此這是不建議使用的方法;因此,可能會傳回錯誤的註解。

shobj_description ( object oid, catalog name ) → text

傳回由其 OID 和包含系統目錄的名稱所指定的共用資料庫物件的註解。這與 obj_description 類似,只是它用於檢索共用物件(即資料庫、角色和資料表空間)的註解。某些系統目錄對於每個叢集中的所有資料庫都是全域的,並且其中物件的描述也以全域方式儲存。


9.27.7. 資料有效性檢查函數 #

表 9.81 中顯示的函數有助於檢查建議輸入資料的有效性。

表 9.81. 資料有效性檢查函數

函數

描述

範例

pg_input_is_valid ( string text, type text ) → boolean

測試給定的 string 是否為指定資料類型的有效輸入,傳回 true 或 false。

只有在資料類型的輸入函數已更新為將無效輸入報告為軟性錯誤時,此函數才能按預期運作。否則,無效輸入將中止交易,就像直接將字串轉換為該類型一樣。

pg_input_is_valid('42', 'integer')t

pg_input_is_valid('42000000000', 'integer')f

pg_input_is_valid('1234.567', 'numeric(7,4)')f

pg_input_error_info ( string text, type text ) → record ( message text, detail text, hint text, sql_error_code text )

測試給定的 string 是否為指定資料類型的有效輸入;如果不是,則傳回將會拋出的錯誤的詳細資訊。如果輸入有效,則結果為 NULL。輸入與 pg_input_is_valid 的輸入相同。

只有在資料類型的輸入函數已更新為將無效輸入報告為軟性錯誤時,此函數才能按預期運作。否則,無效輸入將中止交易,就像直接將字串轉換為該類型一樣。

SELECT * FROM pg_input_error_info('42000000000', 'integer')

                       message                        | detail | hint | sql_error_code
------------------------------------------------------+--------+------+----------------
 value "42000000000" is out of range for type integer |        |      | 22003

9.27.8. 交易 ID 和快照資訊函數 #

表 9.82 中顯示的函數以可匯出的形式提供伺服器交易資訊。這些函數的主要用途是確定在兩個快照之間提交了哪些交易。

表 9.82. 交易 ID 和快照資訊函數

函數

描述

pg_current_xact_id () → xid8

傳回目前交易的 ID。如果目前交易尚未擁有 ID(因為它尚未執行任何資料庫更新),它將分配一個新的 ID;有關詳細資訊,請參閱第 66.1 節。如果在子交易中執行,這將傳回最上層交易 ID;有關詳細資訊,請參閱第 66.3 節

pg_current_xact_id_if_assigned () → xid8

傳回目前交易的 ID,如果尚未分配 ID,則傳回 NULL。(如果交易可能為唯讀,最好使用此變體,以避免不必要地耗用 XID。) 如果在子交易中執行,這將傳回頂層交易 ID。

pg_xact_status ( xid8 ) → text

報告最近交易的提交狀態。結果為 in progresscommittedaborted 之一,前提是交易夠新,系統保留了該交易的提交狀態。如果它夠舊,系統中沒有任何對該交易的參考,且提交狀態資訊已被丟棄,則結果為 NULL。例如,應用程式可以使用此函數來確定在 COMMIT 正在進行時,應用程式和資料庫伺服器斷線後,其交易是否已提交或中止。請注意,準備好的交易會報告為 in progress;如果應用程式需要確定交易 ID 是否屬於準備好的交易,則必須檢查 pg_prepared_xacts

pg_current_snapshot () → pg_snapshot

傳回目前的快照,一種資料結構,顯示目前哪些交易 ID 正在進行中。快照中僅包含頂層交易 ID;不顯示子交易 ID;有關詳細資訊,請參閱第 66.3 節

pg_snapshot_xip ( pg_snapshot ) → setof xid8

傳回快照中包含的正在進行中的交易 ID 集合。

pg_snapshot_xmax ( pg_snapshot ) → xid8

傳回快照的 xmax

pg_snapshot_xmin ( pg_snapshot ) → xid8

傳回快照的 xmin

pg_visible_in_snapshot ( xid8, pg_snapshot ) → boolean

根據此快照,給定的交易 ID 是否可見(也就是說,它是否在拍攝快照之前完成)?請注意,此函數不會為子交易 ID (subxid) 提供正確的答案;有關詳細資訊,請參閱第 66.3 節


內部交易 ID 類型 xid 是 32 位元寬,每 40 億次交易就會環繞一次。但是,表 9.82中顯示的函數使用 64 位元類型 xid8,它在安裝的生命週期內不會環繞,並且如果需要,可以透過強制轉型轉換為 xid;有關詳細資訊,請參閱第 66.1 節。資料類型 pg_snapshot 儲存有關特定時間點交易 ID 可見性的資訊。其組成部分在表 9.83中描述。pg_snapshot 的文字表示形式為 xmin:xmax:xip_list。例如,10:20:10,14,15 表示 xmin=10, xmax=20, xip_list=10, 14, 15

表 9.83. 快照組成部分

名稱 描述
xmin 仍在作用中的最低交易 ID。xmin 之前的所有交易 ID 都已提交且可見,或者已回滾且已失效。
xmax 超過最高已完成交易 ID 的一個。截至拍攝快照時,大於或等於 xmax 的所有交易 ID 尚未完成,因此不可見。
xip_list 在拍攝快照時正在進行中的交易。在快照拍攝時,xmin <= X < xmax 且不在這個清單中的交易 ID 已經完成,因此根據其提交狀態是可見或已失效。此清單不包含子交易 (subxid) 的交易 ID。

在 13 之前的 PostgreSQL 版本中,沒有 xid8 類型,因此提供了這些函數的變體,這些變體使用 bigint 來表示 64 位元的 XID,並具有相應的不同快照資料類型 txid_snapshot。這些較舊的函數的名稱中包含 txid。它們仍然支援向後相容性,但可能會從未來的版本中移除。請參閱表 9.84

表 9.84. 已棄用的交易 ID 和快照資訊函數

函數

描述

age ( xid ) → integer

傳回提供的交易 ID 和目前交易計數器之間的交易數量。

mxid_age ( xid ) → integer

傳回提供的 multixact ID 和目前 multixacts 計數器之間的 multixacts ID 數量。

txid_current () → bigint

請參閱 pg_current_xact_id()

txid_current_if_assigned () → bigint

請參閱 pg_current_xact_id_if_assigned()

txid_current_snapshot () → txid_snapshot

請參閱 pg_current_snapshot()

txid_snapshot_xip ( txid_snapshot ) → setof bigint

請參閱 pg_snapshot_xip()

txid_snapshot_xmax ( txid_snapshot ) → bigint

請參閱 pg_snapshot_xmax()

txid_snapshot_xmin ( txid_snapshot ) → bigint

請參閱 pg_snapshot_xmin()

txid_visible_in_snapshot ( bigint, txid_snapshot ) → boolean

請參閱 pg_visible_in_snapshot()

txid_status ( bigint ) → text

請參閱 pg_xact_status()


9.27.9. 已提交交易資訊函數 #

表 9.85中顯示的函數提供有關過去交易提交時間的資訊。只有在啟用 track_commit_timestamp 設定選項時,並且僅適用於在啟用後提交的交易,它們才會提供有用的資料。提交時間戳記資訊會在 vacuum 期間定期移除。

表 9.85. 已提交的交易資訊函數

函數

描述

pg_xact_commit_timestamp ( xid ) → timestamp with time zone

傳回交易的提交時間戳記。

pg_xact_commit_timestamp_origin ( xid ) → record ( timestamp timestamp with time zone, roident oid)

傳回交易的提交時間戳記和複製來源。

pg_last_committed_xact () → record ( xid xid, timestamp timestamp with time zone, roident oid )

傳回最新提交的交易的交易 ID、提交時間戳記和複製來源。


9.27.10. 控制資料函數 #

表 9.86 中顯示的函數會印出在 initdb 期間初始化的資訊,例如目錄版本。它們也會顯示關於預寫式日誌和檢查點處理的資訊。此資訊是叢集範圍的,並非特定於任何一個資料庫。這些函數提供與 pg_controldata 應用程式幾乎相同的資訊(來自相同的來源)。

表 9.86. 控制資料函數

函數

描述

pg_control_checkpoint () → record

傳回關於目前檢查點狀態的資訊,如表 9.87 所示。

pg_control_system () → record

傳回關於目前控制檔案狀態的資訊,如表 9.88 所示。

pg_control_init () → record

傳回關於叢集初始化狀態的資訊,如表 9.89 所示。

pg_control_recovery () → record

傳回關於恢復狀態的資訊,如表 9.90 所示。


表 9.87. pg_control_checkpoint 輸出欄位

欄位名稱 資料類型
checkpoint_lsn pg_lsn
redo_lsn pg_lsn
redo_wal_file text
timeline_id integer
prev_timeline_id integer
full_page_writes boolean
next_xid text
next_oid oid
next_multixact_id xid
next_multi_offset xid
oldest_xid xid
oldest_xid_dbid oid
oldest_active_xid xid
oldest_multi_xid xid
oldest_multi_dbid oid
oldest_commit_ts_xid xid
newest_commit_ts_xid xid
checkpoint_time timestamp with time zone

表 9.88. pg_control_system 輸出欄位

欄位名稱 資料類型
pg_control_version integer
catalog_version_no integer
system_identifier bigint
pg_control_last_modified timestamp with time zone

表 9.89. pg_control_init 輸出欄位

欄位名稱 資料類型
max_data_alignment integer
database_block_size integer
blocks_per_segment integer
wal_block_size integer
bytes_per_wal_segment integer
max_identifier_length integer
max_index_columns integer
max_toast_chunk_size integer
large_object_chunk_size integer
float8_pass_by_value boolean
data_page_checksum_version integer

表 9.90. pg_control_recovery 輸出欄位

欄位名稱 資料類型
min_recovery_end_lsn pg_lsn
min_recovery_end_timeline integer
backup_start_lsn pg_lsn
backup_end_lsn pg_lsn
end_of_backup_record_required boolean

9.27.11. 版本資訊函數 #

表 9.91 中顯示的函數會印出版本資訊。

表 9.91. 版本資訊函數

函數

描述

version () → text

傳回描述 PostgreSQL 伺服器版本的字串。您也可以從 server_version 取得此資訊,或者若要取得機器可讀的版本,請使用 server_version_num。軟體開發人員應該使用 server_version_num(自 8.2 版起可用)或 PQserverVersion,而不是剖析文字版本。

unicode_version () → text

傳回代表 PostgreSQL 使用的 Unicode 版本的字串。

icu_unicode_version () → text

傳回代表 ICU 使用的 Unicode 版本的字串,如果伺服器是以 ICU 支援建置的;否則傳回 NULL


9.27.12. WAL 摘要資訊函數 #

表 9.92 中顯示的函數會印出關於 WAL 摘要狀態的資訊。請參閱 summarize_wal

表 9.92. WAL 摘要資訊函數

函數

描述

pg_available_wal_summaries () → setof record ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn )

傳回關於位於資料目錄中 pg_wal/summaries 底下的 WAL 摘要檔案的資訊。每個 WAL 摘要檔案會傳回一列。每個檔案會摘要在指示的 LSN 範圍內、指示的 TLI 上的 WAL。此函數可能可用於判斷伺服器上是否存在足夠的 WAL 摘要,以根據已知起始 LSN 的先前備份來進行增量備份。

pg_wal_summary_contents ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn ) → setof record ( relfilenode oid, reltablespace oid, reldatabase oid, relforknumber smallint, relblocknumber bigint, is_limit_block boolean )

傳回關於由 TLI 識別,且具有起始和結束 LSN 的單一 WAL 摘要檔內容的資訊。每個 is_limit_block 為 false 的列,表示由其餘輸出欄位識別的區塊,已由這個檔案摘要的範圍內的至少一個 WAL 記錄修改。每個 is_limit_block 為 true 的列,表示 (a) 關係分叉已在相關 WAL 記錄範圍內截斷至 relblocknumber 給定的長度,或 (b) 關係分叉已在相關 WAL 記錄範圍內建立或捨棄;在這種情況下,relblocknumber 將為零。

pg_get_wal_summarizer_state () → record ( summarized_tli bigint, summarized_lsn pg_lsn, pending_lsn pg_lsn, summarizer_pid int )

傳回關於 WAL 摘要器的進度資訊。如果 WAL 摘要器自執行個體啟動以來從未執行過,則 summarized_tlisummarized_lsn 將分別為 00/0;否則,它們將是寫入磁碟的最後一個 WAL 摘要檔的 TLI 和結束 LSN。如果 WAL 摘要器目前正在執行,pending_lsn 將是它已使用的最後一個記錄的結束 LSN,它必須始終大於或等於 summarized_lsn;如果 WAL 摘要器未執行,它將等於 summarized_lsnsummarizer_pid 是 WAL 摘要器進程的 PID(如果正在執行),否則為 NULL。

作為一個特殊例外,如果在 wal_level=minimal 下產生的 WAL 上執行,WAL 摘要器將拒絕產生 WAL 摘要檔案,因為此類摘要將不安全,無法用作增量備份的基礎。在這種情況下,上面的欄位將繼續推進,就好像正在產生摘要一樣,但不會將任何內容寫入磁碟。一旦摘要器達到在 wal_level 設定為 replica 或更高版本時產生的 WAL,它將恢復將摘要寫入磁碟。


提交更正

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