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 / 8.0

9.27. 系統資訊函式和運算子 #

本節描述的函式用於獲取有關 PostgreSQL 安裝的各種資訊。

9.27.1. 會話資訊函式 #

表 9.71 顯示了幾個用於提取會話和系統資訊的函式。

除了本節列出的函式外,還有許多與統計系統相關的函式也提供系統資訊。有關更多資訊,請參閱 第 27.2.26 節

表 9.71. 會話資訊函式

函式

描述

current_catalogname

current_database () → name

返回當前資料庫的名稱。(SQL 標準中,資料庫稱為“目錄”(catalogs),因此 current_catalog 是標準的拼寫。)

current_query () → text

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

current_rolename

這等同於 current_user

current_schemaname

current_schema () → name

返回當前搜尋路徑中的第一個 schema 的名稱(如果搜尋路徑為空,則返回 NULL)。這是在建立物件時不指定目標 schema 時使用的 schema。

current_schemas ( include_implicit boolean ) → name[]

返回當前有效搜尋路徑中的所有 schema 名稱的陣列,按優先順序順序排列。(search_path 設定中不對應現有、可搜尋 schema 的項將被忽略。)如果布林引數為 true,則結果中會包含隱式搜尋的系統 schema,如 pg_catalog

current_username

返回當前執行上下文的使用者名稱稱。

inet_client_addr () → inet

返回當前客戶端的 IP 地址,如果當前連線是透過 Unix 域套接字進行的,則返回 NULL

inet_client_port () → integer

返回當前客戶端的 IP 埠號,如果當前連線是透過 Unix 域套接字進行的,則返回 NULL

inet_server_addr () → inet

返回伺服器接受當前連線的 IP 地址,如果當前連線是透過 Unix 域套接字進行的,則返回 NULL

inet_server_port () → integer

返回伺服器接受當前連線的 IP 埠號,如果當前連線是透過 Unix 域套接字進行的,則返回 NULL

pg_backend_pid () → integer

返回連線到當前會話的伺服器程序的程序 ID。

pg_blocking_pids ( integer ) → integer[]

返回阻止具有指定程序 ID 的伺服器程序獲取鎖的會話的程序 ID 陣列,如果不存在此類伺服器程序或其未被阻止,則返回空陣列。

一個伺服器程序阻止另一個程序,是因為它持有與被阻止程序的鎖請求衝突的鎖(硬阻塞),或者它正在等待一個與被阻止程序的鎖請求衝突的鎖,並且在等待佇列中排在被阻止程序前面(軟阻塞)。使用並行查詢時,結果總是列出客戶端可見的程序 ID(即 pg_backend_pid 的結果),即使實際的鎖是由子工作程序持有或等待的。因此,結果中可能包含重複的 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_get_loaded_modules () → setof record ( module_name text, version text, file_name text )

返回當前伺服器會話中已載入的可載入模組列表。module_nameversion 欄位在模組作者未使用 PG_MODULE_MAGIC_EXT 宏提供值時為 NULL。file_name 欄位提供模組(共享庫)的檔名。

pg_my_temp_schema () → oid

返回當前會話的臨時 schema 的 OID,如果沒有(因為它沒有建立任何臨時表)則返回零。

pg_is_other_temp_schema ( oid ) → boolean

如果給定的 OID 是另一個會話的臨時 schema 的 OID,則返回 true。(例如,這對於從目錄顯示中排除其他會話的臨時表很有用。)

pg_jit_available () → boolean

如果一個JIT編譯器擴充套件可用(請參閱 第 30 章)並且 jit 配置引數設定為 on,則返回 true。

pg_numa_available () → boolean

如果伺服器已編譯支援NUMA支援,則返回 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 事務獲取快照,直到後者確定避免獲取任何謂詞鎖是安全的。有關 serializable 和 deferrable 事務的更多資訊,請參閱 第 13.2.3 節

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

pg_trigger_depth () → integer

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

session_username

返回會話使用者的名稱。

system_usertext

返回使用者在身份驗證週期中提交的身份驗證方法和身份(如果有),然後才被分配資料庫角色。它表示為 auth_method:identityNULL(如果使用者尚未透過身份驗證,例如使用了 Trust 身份驗證)。

username

這等同於 current_user


注意

current_catalog, current_role, current_schema, current_user, session_user, and userSQL中具有特殊的語法地位:它們必須在沒有尾隨括號的情況下呼叫。在 PostgreSQL 中,current_schema 可以選擇性地使用括號,但其他函式則不行。

通常,session_user 是啟動當前資料庫連線的使用者;但超級使用者可以使用 SET SESSION AUTHORIZATION 更改此設定。current_user 是適用於許可權檢查的使用者標識。通常它等於會話使用者,但可以使用 SET ROLE 更改。在執行具有 SECURITY DEFINER 屬性的函式期間,它也會發生變化。在 Unix 術語中,會話使用者是“真實使用者”(real user),當前使用者是“有效使用者”(effective user)。current_role and usercurrent_user 的同義詞。(SQL 標準在 current_rolecurrent_user 之間進行了區分,但 PostgreSQL 沒有,因為它將使用者和角色統一為一種實體。)

9.27.2. 訪問許可權查詢函式 #

表 9.72 列出了允許以程式設計方式查詢物件訪問許可權的函式。(有關許可權的更多資訊,請參閱 第 5.8 節。)在這些函式中,要查詢許可權的使用者可以透過名稱或 OID(pg_authid.oid)指定;如果名稱為 public,則檢查 PUBLIC 偽角色的許可權。此外,user 引數可以完全省略,在這種情況下假定為 current_user。要查詢的物件也可以透過名稱或 OID 指定。按名稱指定時,如果相關,則可以包含 schema 名稱。感興趣的訪問許可權由文字字串指定,該字串必須求值為物件型別的適當許可權關鍵字之一(例如 SELECT)。可選地,可以在許可權型別後面新增 WITH GRANT OPTION 來測試是否擁有授予選項。此外,多個許可權型別可以以逗號分隔,在這種情況下,如果列出的任何許可權被持有,則結果為 true。(許可權字串的大小寫不敏感,並且允許在許可權名稱之間有額外的空格,但在名稱內部不允許。)一些示例

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

表 9.72. 訪問許可權查詢函式

函式

描述

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

使用者是否對錶的任何列擁有許可權?如果使用者對整個表擁有許可權,或者至少有一列具有列級別的許可權授予,則此函式成功。允許的許可權型別為 SELECT, INSERT, UPDATE, and REFERENCES

has_column_privilege ( [ user name or oid, ] table text or oid, column text or smallint, privilege text ) → boolean

使用者是否對指定的表列擁有許可權?如果使用者對整個表擁有許可權,或者該列具有列級別的許可權授予,則此函式成功。列可以透過名稱或屬性編號(pg_attribute.attnum)指定。允許的許可權型別為 SELECT, INSERT, UPDATE, and REFERENCES

has_database_privilege ( [ user name or oid, ] database text or oid, privilege text ) → boolean

使用者是否對資料庫擁有許可權?允許的許可權型別為 CREATE, CONNECT, TEMPORARY, and TEMP(等同於 TEMPORARY)。

has_foreign_data_wrapper_privilege ( [ user name or oid, ] fdw text or oid, 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_largeobject_privilege ( [ user name or oid, ] largeobject oid, privilege text ) → boolean

使用者是否對大型物件擁有許可權?允許的許可權型別為 SELECT and UPDATE

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

使用者是否對配置引數擁有許可權?引數名稱不區分大小寫。允許的許可權型別為 SET and ALTER SYSTEM

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

使用者是否對 schema 擁有許可權?允許的許可權型別為 CREATE and USAGE

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

使用者是否對序列擁有許可權?允許的許可權型別為 USAGE, SELECT, and UPDATE

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

使用者是否對錶擁有許可權?允許的許可權型別為 SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER, and MAINTAIN

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

使用者是否對角色擁有許可權?允許的許可權型別為 MEMBER, USAGE, and SETMEMBER 表示直接或間接成員身份,不考慮授予了哪些具體許可權。USAGE 表示角色許可權是否可以立即使用,無需執行 SET ROLE,而 SET 表示是否可以使用 SET ROLE 命令切換到該角色。WITH ADMIN OPTION or WITH GRANT OPTION 可以新增到任何這些許可權型別後面,以測試是否擁有 ADMIN 許可權(所有六種拼寫測試的是同一個東西)。此函式不允許設定 userpublic 的特殊情況,因為 PUBLIC 偽角色永遠不能是真實角色的成員。

row_security_active ( table text or oid ) → boolean

在當前使用者和當前環境的上下文中,指定表的行級安全性是否處於活動狀態?


表 9.73 顯示了 aclitem 型別可用的運算子,它是訪問許可權的目錄表示。有關如何讀取訪問許可權值的資訊,請參閱 第 5.8 節

表 9.73. aclitem 運算子

運算子

描述

示例

aclitem = aclitemboolean

aclitems 相等嗎?(請注意,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.74 顯示了一些用於管理 aclitem 型別的其他函式。

表 9.74. 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 列中表示為零。每個授予的許可權都表示為單獨的行,如 SELECT, INSERT 等(請參閱 表 5.1 檢視完整列表)。請注意,每個許可權都分解為單獨的行,因此 privilege_type 列中只有一個關鍵字。

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

使用給定的屬性構造一個 aclitemprivileges 是一個逗號分隔的許可權名稱列表,例如 SELECT, INSERT 等,所有這些都將在結果中設定。(許可權字串的大小寫不敏感,並且允許在許可權名稱之間有額外的空格,但在名稱內部不允許。)


9.27.3. Schema 可見性查詢函式 #

表 9.75 顯示了確定某個物件在當前 schema 搜尋路徑中是否“可見”的函式。例如,如果一個表所在的 schema 在搜尋路徑中,並且沒有同名表出現在搜尋路徑的前面,則該表被認為是可見的。這等同於該表可以不加 schema 限定地按名稱引用。因此,要列出所有可見表的名稱

SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);

對於函式和運算子,搜尋路徑中的一個物件如果名稱(以及引數資料型別)在前一個物件出現之前,則被認為是可見的。對於運算子類和運算子族,將同時考慮名稱和關聯的索引訪問方法。

表 9.75. Schema 可見性查詢函式

函式

描述

pg_collation_is_visible ( collation oid ) → boolean

collation 在搜尋路徑中是否可見?

pg_conversion_is_visible ( conversion oid ) → boolean

conversion 在搜尋路徑中是否可見?

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 別名型別(regclass, regtype, regprocedure, regoperator, regconfig, or regdictionary)會很方便,例如:

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

請注意,透過這種方式測試非 schema 限定的型別名稱沒有太大意義——如果名稱可以識別,它就必須是可見的。

9.27.4. 系統目錄資訊函式 #

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

表 9.76. 系統目錄資訊函式

函式

描述

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

以在 CREATE FUNCTION 中需要出現的格式,重新建構函式的 RETURNS 子句。對於過程返回 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。如果該列是標識列,則關聯的序列是為該列內部建立的序列。對於使用 serial 型別(serial, smallserial, bigserial)建立的列,它是為該 serial 列定義建立的序列。在後一種情況下,可以透過 ALTER SEQUENCE OWNED BY 修改或刪除關聯。 (此函式可能應該命名為 pg_get_owned_sequence;其當前名稱反映了它歷史上用於 serial 型別列的事實。)第一個引數是帶可選 schema 的表名,第二個引數是列名。因為第一個引數可能同時包含 schema 和表名,所以它會按常規的 SQL 規則解析,這意味著預設情況下會被轉為小寫。第二個引數僅作為列名,按字面處理,因此保留其大小寫。結果已格式化,可用於傳遞給序列函式(請參閱 第 9.17 節)。

典型用法是在讀取標識列或 serial 列的序列的當前值時,例如:

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.77 中列出了常見的索引列屬性。(請注意,擴充套件訪問方法可以為其索引定義其他屬性名稱。)如果屬性名稱未知或不適用於特定物件,或者 OID 或列號未標識有效物件,則返回 NULL

pg_index_has_property ( index regclass, property text ) → boolean

測試索引是否具有指定的屬性。表 9.78 中列出了常見的索引屬性。(請注意,擴充套件訪問方法可以為其索引定義其他屬性名稱。)如果屬性名稱未知或不適用於特定物件,或者 OID 未標識有效物件,則返回 NULL

pg_indexam_has_property ( am oid, property text ) → boolean

測試索引訪問方法是否具有指定的屬性。訪問方法屬性列在 表 9.79 中。如果屬性名稱未知或不適用於特定物件,或者 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.80 中列出的最有用標誌。

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

返回傳遞給它的值的 collation 名稱。值將被引用並根據需要新增 schema 限定。如果引數表示式沒有推匯出 collation,則返回 NULL。如果引數不是可 collation 的資料型別,則會引發錯誤。

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

將文字 collation 名稱轉換為其 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.77. 索引列屬性

名稱 描述
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.78. 索引屬性

名稱 描述
clusterable 索引是否可以用於 CLUSTER 命令?
index_scan 索引是否支援普通(非點陣圖)掃描?
bitmap_scan 索引是否支援點陣圖掃描?
backward_scan 掃描方向是否可以在掃描中途改變(以支援游標上的 FETCH BACKWARD 而無需物化)?

表 9.79. 索引訪問方法屬性

名稱 描述
can_order 訪問方法是否支援 CREATE INDEX 中的 ASCDESC 和相關關鍵字?
can_unique 訪問方法是否支援唯一索引?
can_multi_col 訪問方法是否支援多列索引?
can_exclude 訪問方法是否支援排除約束?
can_include 訪問方法是否支援 CREATE INDEXINCLUDE 子句?

表 9.80. GUC 標誌

Flag 描述
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.81 列出了與資料庫物件標識和定址相關的函式。

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

函式

描述

pg_get_acl ( classid oid, objid oid, objsubid integer ) → aclitem[]

返回ACL資料庫物件的,由目錄 OID、物件 OID 和子物件 ID 指定。對於未定義的,此函式返回 NULL 值。

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 值標識。


pg_get_acl 對於檢索和檢查與資料庫物件關聯的許可權很有用,無需檢視特定目錄。例如,要檢索當前資料庫中所有物件的已授予許可權

postgres=# SELECT
    (pg_identify_object(s.classid,s.objid,s.objsubid)).*,
    pg_catalog.pg_get_acl(s.classid,s.objid,s.objsubid) AS acl
FROM pg_catalog.pg_shdepend AS s
JOIN pg_catalog.pg_database AS d
    ON d.datname = current_database() AND
       d.oid = s.dbid
JOIN pg_catalog.pg_authid AS a
    ON a.oid = s.refobjid AND
       s.refclassid = 'pg_authid'::regclass
WHERE s.deptype = 'a';
-[ RECORD 1 ]-----------------------------------------
type     | table
schema   | public
name     | testtab
identity | public.testtab
acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}

9.27.6. 註釋資訊函式 #

表 9.82. 註釋資訊函式 中顯示的函式用於提取使用 COMMENT 命令之前儲存的註釋。如果找不到指定引數的註釋,則返回 null 值。

表 9.82. 註釋資訊函式

函式

描述

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.83. 資料有效性檢查函式 中顯示的函式有助於檢查建議輸入資料的有效性。

表 9.83. 資料有效性檢查函式

函式

描述

示例

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.84. 事務 ID 和快照資訊函式 中顯示的函式以可匯出格式提供伺服器事務資訊。這些函式的主要用途是確定在兩個快照之間提交了哪些事務。

表 9.84. 事務 ID 和快照資訊函式

函式

描述

age ( xid ) → integer

返回提供的事務 ID 與當前事務計數器之間的事務數。

mxid_age ( xid ) → integer

返回提供的多事務 ID 與當前多事務計數器之間的多事務 ID 數。

pg_current_xact_id () → xid8

返回當前事務的 ID。如果當前事務尚無 ID(因為它尚未執行任何資料庫更新),它將分配一個新的 ID;有關詳細資訊,請參閱 第 67.1 節。如果在子事務中執行,這將返回頂層事務 ID;有關詳細資訊,請參閱 第 67.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;有關詳細資訊,請參閱 第 67.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)不會給出正確答案;有關詳細資訊,請參閱 第 67.3 節

pg_get_multixact_members ( multixid xid ) → setof record ( xid xid, mode text )

返回指定多事務 ID 的每個成員的事務 ID 和鎖定模式。鎖定模式 forupdfornokeyupdshkeysh 分別對應於行級鎖 FOR UPDATEFOR NO KEY UPDATEFOR SHAREFOR KEY SHARE,如 第 13.3.2 節中所述。另外兩種模式是多事務特有的:nokeyupd,用於不修改鍵列的更新;以及 upd,用於修改鍵列的更新或刪除。


內部事務 ID 型別 xid 是 32 位寬,每 40 億次事務迴繞一次。但是,表 9.84. 事務 ID 和快照資訊函式 中顯示的函式(agemxid_agepg_get_multixact_members 除外)使用 64 位型別 xid8,該型別在安裝生命週期內不會迴繞,如果需要,可以轉換為 xid 型別;有關詳細資訊,請參閱 第 67.1 節pg_snapshot 資料型別儲存有關特定時間點事務 ID 可見性的資訊。其元件在表 9.85. 快照元件 中描述。pg_snapshot 的文字表示為 xmin:xmax:xip_list。例如 10:20:10,14,15 表示 xmin=10, xmax=20, xip_list=10, 14, 15

表 9.85. 快照元件

名稱 描述
xmin 最低仍然活躍的事務 ID。所有小於 xmin 的事務 ID 要麼已提交併可見,要麼已回滾並死掉。
xmax 最高已完成事務 ID 的下一個 ID。在快照拍攝時,所有大於或等於 xmax 的事務 ID 都尚未完成,因此是不可見的。
xip_list 快照拍攝時正在進行的事務。事務 ID xmin <= X < xmax 且不在此列表中的事務在快照拍攝時已完成,因此根據其提交狀態可見或死掉。此列表不包含子事務(subxids)的事務 ID。

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

表 9.86. 已棄用的事務 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.87. 已提交事務資訊函式 中顯示的函式提供有關過去事務提交時間的資訊。只有當 track_commit_timestamp 配置選項啟用且僅對啟用後提交的事務有用時,它們才提供有用資料。通常會在 vacuum 過程中刪除提交時間戳資訊。

表 9.87. 已提交事務資訊函式

函式

描述

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.88. 控制資料函式 中顯示的函式會列印在 initdb 期間初始化的資訊,例如目錄版本。它們還顯示有關預寫日誌和檢查點處理的資訊。這些資訊是叢集範圍的,不特定於任何單個數據庫。這些函式提供與 pg_controldata 應用程式相同的資訊,來自同一源。

表 9.88. 控制資料函式

函式

描述

pg_control_checkpoint () → record

返回有關當前檢查點狀態的資訊,如 表 9.89. pg_control_checkpoint 輸出列 中所示。

pg_control_system () → record

返回有關當前控制檔案狀態的資訊,如 表 9.90. pg_control_system 輸出列 中所示。

pg_control_init () → record

返回有關叢集初始化狀態的資訊,如 表 9.91. pg_control_init 輸出列 中所示。

pg_control_recovery () → record

返回有關恢復狀態的資訊,如 表 9.92. pg_control_recovery 輸出列 中所示。


表 9.89. pg_control_checkpoint 輸出列

Column Name Data Type
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.90. pg_control_system 輸出列

Column Name Data Type
pg_control_version integer
catalog_version_no integer
system_identifier bigint
pg_control_last_modified timestamp with time zone

表 9.91. pg_control_init 輸出列

Column Name Data Type
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
default_char_signedness boolean

表 9.92. pg_control_recovery 輸出列

Column Name Data Type
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.93. 版本資訊函式 中顯示的函式會列印版本資訊。

表 9.93. 版本資訊函式

函式

描述

version () → text

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

unicode_version () → text

返回表示 PostgreSQL 使用的 Unicode 版本的字串。

icu_unicode_version () → text

如果伺服器使用 ICU 構建,則返回表示 ICU 使用的 Unicode 版本的字串;否則返回 NULL


9.27.12. WAL 摘要資訊函式 #

表 9.94. WAL 摘要資訊函式 中顯示的函式會列印有關 WAL 摘要狀態的資訊。請參閱 summarize_wal

表 9.94. 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,該 LSN 必須始終大於或等於 summarized_lsn;如果 WAL 摘要器未執行,它將等於 summarized_lsnsummarizer_pid 是 WAL 摘要器程序的 PID(如果正在執行),否則為 NULL。

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


提交更正

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