會話信息函數表展示了多個可以抽取會話和系統信息的函數。除了本節列出的函數,還有一些與統計系統相關的函數也提供系統信息。
會話信息函數
current_catalog → name current_database () → name 返回當前數據庫的名稱。(在SQL標準中數據庫被稱為“catalogs”,因此current_catalog 是該標準的拼寫方式) |
current_query () → text 返回當前所執行查詢的文本,由客戶端提交的(可能包含一個以上的語句)。 |
current_role → name 這個等同于 current_user 。 |
current_schema → name current_schema () → name
返回在搜索路徑中的第一個模式的名稱(如果搜索路徑為空則返回空值)。 這個模式將用于沒有指定目標模式就創建的任何表或其他已命名對象。 |
current_schemas ( include_implicit boolean ) → name[] 返回當前在有效搜索路徑中的所有模式的名稱的數組,以優先級順序。如果布爾參數為true ,則類似pg_catalog 的隱式搜索的系統模式將包含在結果中。 |
current_user → name 返回當前執行上下文的用戶名。 |
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一起獲取鎖定,如果沒有這樣的服務器進程或者沒有被阻塞,則返回一個空數組。 如果一個服務器進程持有一個與被阻塞進程的鎖請求沖突的鎖(硬阻塞),或者正在等待一個與被阻塞進程的鎖請求沖突并且在等待隊列中位于其前面的鎖(軟阻塞),那么這個服務器進程就會阻塞另一個服務器進程。 當使用并行查詢時結果總是列出客戶端可見的進程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 將返回在有序列表中找到的第一種格式的文件路徑:stderr ,csvlog 。 如果沒有日志文件具有任何這些格式,則返回NULL 。 要請求關于特定日志文件格式的信息,可以提供 csvlog 或 stderr 作為可選參數的值。 如果在log_destination中沒有配置需要的日志格式,則結果為NULL 。 結果反映了current_logfiles 文件的內容。 |
pg_my_temp_schema () → oid 返回當前會話的臨時模式的OID,如果沒有則返回0(因為它沒有創建任何臨時表)。 |
pg_is_other_temp_schema ( oid ) → boolean 如果給定的OID是另一個會話的臨時模式的OID則返回真。(這可能是有用的,例如,在目錄顯示中排除其他會話的臨時表)。 |
pg_jit_available () → boolean 如果JIT編譯器擴展可用,并且jit配置參數設置為on ,則返回真。 |
pg_listening_channels () → setof text 返回當前會話正在偵聽的異步通知通道的名稱集。 |
pg_notification_queue_usage () → double precision 返回當前被等待處理的通知所占用的異步通知隊列最大尺寸的分數(0–1)。更多信息請參見LISTEN 和 NOTIFY。 |
pg_postmaster_start_time () → timestamp with time zone 返回服務器啟動時的時間。 |
pg_safe_snapshot_blocking_pids ( integer ) → integer[] 返回一個進程ID數組,該進程ID是阻塞服務器進程獲取安全快照的會話的進程ID數組,如果沒有這樣的服務器進程或者沒有阻塞,則返回一個空數組。 運行SERIALIZABLE 事務的會話會阻止SERIALIZABLE READ ONLY DEFERRABLE 事務獲取快照,直到后者確定可以安全地避免獲取謂詞鎖。 頻繁調用這個函數可能會對數據庫性能產生一些影響,因為它需要在短時間內訪問謂詞鎖管理器的共享狀態。 |
pg_trigger_depth () → integer 返回當前嵌套層次的本數據庫觸發器(如果沒有調用則為 0,直接或間接,從一個觸發器內部開始)。 |
session_user → name 返回會話用戶名. |
user → name 這個相當于 current_user 。 |
version () → text 返回描述本數據庫服務器的版本的字符串。 |
重要 current_catalog
、current_role
、current_schema
、current_user
、session_user
和user
在 SQL 里有特殊的語意狀態: 它們被調用時結尾不要跟著園括號。 在 PostgreSQL 中,圓括號可以有選擇性地被用于current_schema
,但是不能和其他的一起用。
session_user
通常是發起當前數據庫連接的用戶,不過超級用戶可以用SET SESSION AUTHORIZATION修改這個設置。 current_user
是用于權限檢查的用戶標識。通常, 它總是等于會話用戶,但是可以被SET ROLE改變。 它也會在函數執行的過程中隨著屬性SECURITY DEFINER
的改變而改變。 在 Unix 的說法里,那么會話用戶是“真實用戶”,而當前用戶是“有效用戶”。 current_role
以及user
是current_user
的同義詞(SQL 標準在current_role
和current_user
之間做了區分,但本數據庫不區分,因為它把用戶和角色統一成了一種實體)。
訪問權限查詢函數表列出那些允許編程查詢對象訪問權限的函數。在這些函數中,可以通過名稱或 OID (pg_authid
.oid
)指定被查詢權限的用戶,或者如果名稱被指定為public
,則檢查 PUBLIC 偽角色的權限。 同樣,user
參數可以完全省略,在這種情況下,假設為current_user
。被查詢的對象也可以通過名稱或 OID 來指定。 通過名稱指定時,可以包含相關的模式名稱。感興趣的訪問權限由一個文本字符串指定,它必須計算為對象類型的一個適當的權限關鍵字(例如,SELECT
)。 還可以將 WITH GRANT OPTION
添加到特權類型中,以測試該特權是否由授予選項持有。 同樣,可以用逗號分隔列出多個特權類型,在這種情況下,如果所列出的特權中有任何一個被持有,結果將為真。 (特權字符串的大小寫不重要,特權名之間允許有額外的空格,但在特權名中不允許)。
SELECT has_table_privilege('myschema.mytable', 'select');
SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');
訪問權限查詢函數
has_any_column_privilege ( [ user name or oid , ] table text or oid , privilege text ) → boolean 用戶是否對表的任何列有權限? 如果對整個表持有特權,或者對至少一個列有列級的特權授予,則會成功。 允許的權限類型為SELECT , INSERT ,UPDATE , 和 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 , 和 REFERENCES 。 |
has_database_privilege ( [ user name or oid , ] database text or oid , privilege text ) → boolean 用戶對數據庫有特權嗎?允許的特權類型為CREATE ,CONNECT ,TEMPORARY , 和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 數據類型相同。一個例子為: |
has_language_privilege ( [ user name or oid , ] language text or oid , privilege text ) → boolean 用戶對語言有特權嗎?唯一允許的特權類型是USAGE 。 |
has_schema_privilege ( [ user name or oid , ] schema text or oid , privilege text ) → boolean 用戶對模式有特權嗎?允許的特權類型是CREATE 和USAGE 。 |
has_sequence_privilege ( [ user name or oid , ] sequence text or oid , privilege text ) → boolean 用戶是否有順序特權?允許的特權類型有USAGE , SELECT , 和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 。 |
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 數據類型相同。 |
pg_has_role ( [ user name or oid , ] role text or oid , privilege text ) → boolean 用戶對角色有特權么?允許的特權類型是MEMBER 和 USAGE 。 MEMBER 表示角色中的直接或間接成員關系(即執行SET ROLE 的權利),而USAGE 表示不執行SET ROLE 情況下是否立即可用角色的特權。 此函數不允許特殊情況下將user 設置為public ,因為PUBLIC偽角色永遠不能成為真實角色的成員。 |
row_security_active ( table text or oid ) → boolean 在當前用戶和當前環境的上下文之中,指定表的行級安全是活動的嗎? |
aclitem 操作符表顯示了aclitem
類型的可用操作符,它是訪問權限的目錄表示。
aclitem
操作符
aclitem = aclitem → boolean aclitem 相等嗎?(注意,aclitem 類型缺少比較操作符的通常集合;它只有相等。 反而言之,aclitem 數組只能進行相等比較)。
'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitem → f
|
aclitem[] @> aclitem → boolean 數組是否包含指定的特權?(如果有一個數組條目與aclitem 的被授權人和授予人相匹配,并且至少具有特權的指定集,則此選項為真)。 '{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitem → t
|
aclitem[] ~ aclitem → boolean
這是@> 的已棄用別名。 '{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitem → t
|
aclitem 函數表顯示了一些額外的函數來管理aclitem
類型。
aclitem
函數
acldefault ( type "char" , ownerId oid ) → aclitem[] 構造一個aclitem 數組,該數組持有type 類型對象的默認訪問特權,該對象屬于OID為ownerId 的角色。 這表示當對象的ACL條目為空時所假定的訪問特權。 type 參數必須是下列中的一個 'c' 對應 COLUMN , 'r' 對應 TABLE 和類表對象, 's' 對應 SEQUENCE , 'd' 對應 DATABASE , 'f' 對應 FUNCTION 或 PROCEDURE , 'l' 對應 LANGUAGE , 'L' 對應 LARGE OBJECT , 'n' 對應 SCHEMA , 't' 對應 TABLESPACE , 'F' 對應 FOREIGN DATA WRAPPER , 'S' 對應 FOREIGN SERVER ,或 'T' 對應 TYPE 或 DOMAIN . |
aclexplode ( aclitem[] ) → setof record ( grantor oid , grantee oid , privilege_type text , is_grantable boolean ) 以行集的形式返回aclitem 數組。如果受讓人是偽角色PUBLIC,則在grantee 列中用0表示。 每個被授予的特權都表示為SELECT , INSERT 等。 注意,每個特權被分割成單獨的一行,因此在privilege_type 列中只出現一個關鍵字。 |
makeaclitem ( grantee oid , grantor oid , privileges text , is_grantable boolean ) → aclitem 使用給定的屬性構造 aclitem 。 |
模式可見性查詢函數表展示了決定是否一個特定對象在當前模式搜索路徑中可見的函數。 例如,如果一個表所在的模式在當前搜索路徑中并且在它之前沒有出現過相同的名字,這個表就被說是可見的。 這等價于在語句中表可以被用名稱引用但不加顯式的模式限定。因此,要列出所有可見表的名字:
SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
對于函數和操作符,如果路徑前面沒有相同名稱and argument data type(s)的對象,那么搜索路徑中的對象就是可見的。 對于操作符類和操作符族,要考慮名稱和關聯的索引訪問方法。
模式可見性查詢函數
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 別名類型(regclass
、regtype
、regprocedure
、regoperator
、regconfig
或regdictionary
)將會很方便。例如:
SELECT pg_type_is_visible('myschema.widget'::regtype);
注意以這種方式測試一個非模式限定的類型名沒什么意義 — 如果該名稱完全能被識別,它必須是可見的。
系統目錄信息函數表列出從系統目錄中提取信息的函數。
系統目錄信息函數
format_type ( type oid , typemod integer ) → text 返回由其類型OID和可能的類型修飾符標識的數據類型的SQL名稱。如果沒有已知的類型修飾符,則傳遞NULL值給類型修飾符。 |
pg_get_constraintdef ( constraint oid [, pretty boolean ] ) → text 重構為了約束的創建命令。(這是一個反編譯的重構,而不是命令的原始文本)。 |
pg_get_expr ( expr pg_node_tree , relation oid [, pretty boolean ] ) → text 反編譯存儲在系統目錄中的表達式的內部形式,例如列的默認值。 如果表達式可能包含變量,則指定它們所指向的關系的OID作為第二個參數;如果沒有預期的變量,傳遞0就可以了。 |
pg_get_functiondef ( func oid ) → text 重構為了函數或過程的創建命令。(這是一個反編譯的重構,而不是命令的原始文本)結果是一個完整的CREATE OR REPLACE FUNCTION 或 CREATE 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" , catdesc text ) 返回一組描述服務器識別的SQL關鍵字的記錄。word 列包含關鍵字。 catcode 列包含一個類別代碼:U 表示無保留關鍵字,C 表示可以是列名的關鍵字,T 表示可以是類型或函數名的關鍵字,或者R 表示完全保留關鍵字。 catdesc 列包含描述類別的可能本地化字符串。 |
pg_get_ruledef ( rule oid [, pretty boolean ] ) → text 重構針對規則的創建命令。(這是一個反編譯的重構,而不是命令的原始文本) |
pg_get_serial_sequence ( table text , column text ) → text 返回與列相關聯的序列名稱,如果沒有序列與該列相關聯則返回NULL。 如果列是標識列,則關聯序列是在內部為該列創建的序列。 對于使用一種串行類型(serial , smallserial , bigserial )創建的列,它是為該串行列定義創建的序列。 在后一種情況下,可以使用ALTER SEQUENCE OWNED BY 修改或刪除關聯。 (這個函數可能應該被稱為pg_get_owned_sequence ;它的當前名稱反映了它在歷史上曾與串行類型的列一起使用)。 第一個參數是具有可選模式的表名,第二個參數是列名。 由于第一個參數可能包含模式名和表名,因此按照通常的SQL規則解析它,這意味著默認情況下它是小寫的。 第二個參數只是一個列名,按照字面來處理,因此保留了它的大小寫。結果經過了適當的格式化,可以傳遞給序列函數。 典型的用法是讀取序列的當前值以獲取標識或串行列,示例如下: |
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 測試一個索引列是否具有命名屬性。索引列屬性表列出了常用索引列屬性。(注意,擴展訪問方法可以為其索引定義額外的屬性名。) 如果屬性名未知或不適用于特定對象,或者OID或列號不能識別有效的對象,則返回NULL 。 |
pg_index_has_property ( index regclass , property text ) → boolean 測試一個索引是否具有命名屬性。索引性質表列出了常用的索引屬性。(注意,擴展訪問方法可以為其索引定義額外的屬性名)。如果屬性名未知或不適用于特定對象,或者OID不能識別有效的對象,則返回NULL 。 |
pg_indexam_has_property ( am oid , property text ) → boolean 測試索引訪問方法是否具有命名屬性。訪問方法屬性如索引訪問方法性質表所示。 如果屬性名未知或不適用于特定對象,或者OID不能識別有效的對象,則返回NULL 。 |
pg_options_to_table ( options_array text[] ) → setof record ( option_name text , option_value text ) 返回源自pg_class .reloptions 或 pg_attribute .attoptions 的值表示的存儲選項集。 |
pg_tablespace_databases ( tablespace oid ) → setof oid 返回具有存儲在指定表空間中的對象的數據庫的OIDs集。 如果這個函數返回了任何行,那么表空間就不是空的,且不能被刪除。 要識別填充表空間的特定對象,需要連接到由pg_tablespace_databases 標識的數據庫,并查詢它們的pg_class 目錄。 |
pg_tablespace_location ( tablespace oid ) → text 返回表空間所在的文件系統路徑。 |
pg_typeof ( "any" ) → regtype 返回傳遞值給它的數據類型的OID。這對于故障排除或動態構造SQL查詢很有幫助。 函數聲明為返回regtype ,它是一個OID別名類型; 這意味著,為了比較,它與OID相同,但顯示為類型名。 例如: |
COLLATION FOR ( "any" ) → text 返回傳遞值給它的排序規則的名稱。如果需要,該值會被引號括起來,并使用模式限定。 如果沒有為參數表達式派生排序規則,則返回NULL 。如果參數不是可排序數據類型,則會引發錯誤。 例如: |
to_regclass ( text ) → regclass 將文本關系名轉換為它的OID。通過將字符串類型轉換為regclass 可以得到類似的結果; 但是,如果沒有找到名稱,這個函數將返回NULL 而不會拋出錯誤。與強制轉換不同的是,它不接受數字OID作為輸入。 |
to_regcollation ( text ) → regcollation 將文本排序規則名稱轉換為它的OID。通過將字符串類型轉換為regcollation 可以得到類似的結果; 但是,如果沒有找到名稱,這個函數將返回NULL 而不會拋出錯誤。與強制轉換不同的是,它不接受數字OID作為輸入。 |
to_regnamespace ( text ) → regnamespace 將文本模式名轉換為它的OID。通過將字符串轉換為regnamespace 類型可以得到類似的結果; 但是,如果沒有找到名稱,這個函數將返回NULL 而不會拋出錯誤。與強制轉換不同的是,它不接受數字OID作為輸入。 |
to_regoper ( text ) → regoper 將文本操作符名稱轉換為它的OID。通過將字符串類型轉換為regoper 可以得到類似的結果; 但是,如果找不到名稱或名稱有多義性,該函數將返回NULL 而不會拋出錯誤。與強制轉換不同的是,它不接受數字OID作為輸入。 |
to_regoperator ( text ) → regoperator 將文本操作符名稱(帶有參數類型)轉換為其OID。通過將字符串轉換為regoperator 類型可以得到類似的結果; 但是,如果沒有找到名稱,這個函數將返回NULL 而不會拋出錯誤。與強制轉換不同的是,它不接受數字OID作為輸入。 |
to_regproc ( text ) → regproc 將文本函數或過程名轉換為其OID。通過將字符串轉換為regproc 類型可以得到類似的結果; 但是,如果找不到名稱或名稱有多義性,該函數將返回NULL 而不會拋出錯誤。與強制轉換不同的是,它不接受數字OID作為輸入。 |
to_regprocedure ( text ) → regprocedure 將文本函數或過程名(帶有參數類型)轉換為其OID。通過將字符串類型轉換為regprocedure 可以得到類似的結果; 但是,如果沒有找到名稱,這個函數將返回NULL 而不會拋出錯誤。與強制轉換不同的是,它不接受數字OID作為輸入。 |
to_regrole ( text ) → regrole 將文本角色名轉換為它的OID。通過將字符串類型轉換為regrole 可以得到類似的結果; 但是,如果沒有找到名稱,這個函數將返回NULL 而不會拋出錯誤。與強制轉換不同的是,它不接受數字OID作為輸入。 |
to_regtype ( text ) → regtype 將文本類型名轉換為它的OID。通過將字符串類型轉換為regtype 可以得到類似的結果; 但是,如果沒有找到名稱,這個函數將返回NULL 而不會拋出錯誤。與強制轉換不同的是,它不接受數字OID作為輸入。 |
大多數重構(反編譯)數據庫對象的函數都有一個可選的 pretty
標志,如果為true
,結果將被“pretty-printed”。 美觀打印會抑制不必要的圓括號,并為易讀性增加空格。 美觀打印的格式可讀性更好,但是默認格式更有可能被本數據庫的未來版本以同樣的方式解釋; 因此,避免為轉儲目的使用美觀打印的輸出。為pretty
參數傳遞false
會產生與省略參數相同的結果。
索引列屬性
名稱 | 描述 |
asc
| 在向前掃描時列是按照升序排列嗎? |
desc
| 在向前掃描時列是按照降序排列嗎? |
nulls_first
| 在向前掃描時列排序會把空值排在前面嗎? |
nulls_last
| 在向前掃描時列排序會把空值排在最后嗎? |
orderable
| 列具有已定義的排序順序嗎? |
distance_orderable
| 列能否通過一個“distance”操作符(例如ORDER BY col <-> constant )有序地掃描? |
returnable
| 列值是否可以通過一次只用索引掃描返回? |
search_array
| 列是否天然支持col = ANY(array) 搜索? |
search_nulls
| 列是否支持IS NULL 和IS NOT NULL 搜索? |
索引性質
名稱 | 描述 |
clusterable
| 索引是否可以用于CLUSTER 命令? |
index_scan
| 索引是否支持普通掃描(非位圖)? |
bitmap_scan
| 索引是否支持位圖掃描? |
backward_scan
| 在掃描中掃描方向能否被更改(為了支持游標上無需物化的FETCH BACKWARD )? |
索引訪問方法性質
名稱 | 描述 |
can_order
| 訪問方法是否支持ASC 、DESC 以及CREATE INDEX 中的有關關鍵詞? |
can_unique
| 訪問方法是否支持唯一索引? |
can_multi_col
| 訪問方法是否支持多列索引? |
can_exclude
| 訪問方法是否支持排除約束? |
can_include
| 訪問方法是否支持CREATE INDEX 的INCLUDE 子句? |
對象信息和定位函數表列出了與數據庫對象標識和定位有關的函數。
對象信息和定位函數
pg_describe_object ( classid oid , objid oid , objsubid integer ) → text 返回由目錄OID、對象OID和子對象ID(例如表中的列號)標識的數據庫對象的文本描述;當引用整個對象時,子對象ID為0)。 這個描述是人類可讀的,并且可以根據服務器配置進行翻譯。這對于決定pg_depend 目錄中引用的對象的標識特別有用。 |
pg_identify_object ( classid oid , objid oid , objsubid integer ) → record ( type text , schema text , name text , identity text ) 返回包含足夠信息的行以唯一標識由目錄OID、對象OID和子對象ID指定的數據庫對象。 這些信息是為了機器可讀的,永遠不會被翻譯。 type 標識數據庫對象的類型; schema 是對象所屬的模式名,NULL 表示不屬于模式的對象類型; name 是對象的名稱,如果有必要,用引號括起來,如果名稱(隨著模式名稱,如果相關)足以唯一地標識對象,否則為NULL ; identity 是完整的對象標識,其精確格式依賴于對象類型,格式中的每個名稱都是模式限定的,并在必要時用引號括起來。 |
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_names 和object_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_object 或pg_identify_object 。 classid 是包含該對象的系統目錄的OID;objid 是對象本身的OID, objsubid 是子對象的ID,如果沒有則為零。 這個函數是pg_identify_object_as_address 的反向函數。 |
注釋信息函數表中展示的函數抽取注釋,注釋是由COMMENT命令在以前存儲的。如果對指定參數找不到注釋,則返回空值。
注釋信息函數
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指定的數據庫對象的注釋。 這個已被棄用(deprecated)因為無法保證oid在不同的系統目錄中是唯一的;因此,可能會返回錯誤的注釋。 |
shobj_description ( object oid , catalog name ) → text 返回共享數據庫對象的注釋,該對象由其OID和包含的系統編目的名稱指定。 這與obj_description 類似,只是它用于檢索共享對象(也就是數據庫、角色和表空間)上的注釋。 有些系統編目對每個集群中的所有數據庫都是全局的,其中對象的描述也全局存儲。 |
事務ID和快照信息功能表中展示的函數以一種可導出的形式提供了服務器事務信息。 這些函數的主要用途是判斷在兩個快照之間哪些事務被提交。
事務ID和快照信息功能
pg_current_xact_id () → xid8 返回當前事務的ID。如果當前事務還沒有一個ID(因為它還沒有執行任何數據庫更新),它將分配一個新的事務。 |
pg_current_xact_id_if_assigned () → xid8 返回當前事務的ID,如果還沒有分配ID則返回NULL 。 (如果事務可能是只讀的,最好使用這種變體,以避免不必要地消耗XID) |
pg_xact_status ( xid8 ) → text 報告最近的事務的提交狀態。如果事務為最近的,系統會保留事務的提交狀態,則結果是 in progress 、committed 或aborted 。 如果該事務的時間足夠久,并且系統中沒有對該事務的引用,而且提交狀態信息已經被丟棄,則結果為NULL 。 應用可以使用此函數,例如,確定在進行COMMIT 時,應用程序和數據庫服務器斷開連接后,它們的事務是已提交還是中止。 注意,準備好的事務報告為in progress 的事務;如果應用需要確定一個事務ID是否屬于一個準備好的事務,則必須檢查pg_prepared_xacts 。 |
pg_current_snapshot () → pg_snapshot 返回當前snapshot,顯示哪些事務IDs正在進行中的數據結構。 |
pg_snapshot_xip ( pg_snapshot ) → setof xid8 返回快照中包含的正在進行的事務IDs集。 |
pg_snapshot_xmax ( pg_snapshot ) → xid8 返回快照的xmax 。 |
pg_snapshot_xmin ( pg_snapshot ) → xid8 返回快照的xmin 。 |
pg_visible_in_snapshot ( xid8 , pg_snapshot ) → boolean 根據此快照,給定的事務ID是否可見(visible)(也就是說,它是否在快照拍攝之前完成)? 注意,這個函數不會給出子事務ID的正確答案。 |
內部事務 ID 類型xid
是 32 位寬的,可捆卷(wraps around)每 40 億個事務。 但是,事務 ID 和快照信息功能表中所示的函數使用的是 64 位類型的xid8
,它在安裝過程中不捆卷(wraps around),如果需要,可以通過強制轉換將其轉換為xid
。 數據類型pg_snapshot
存儲特定時刻事務 ID 可見性的信息。 其組成如快照組件表所描述。pg_snapshot
的文本表示形式是xmin``:``xmax``:``xip_list
。 例如10:20:10,14,15
表示xmin=10, xmax=20, xip_list=10, 14, 15
。
快照組件
名稱 | 描述 |
xmin
| 仍然處于活動狀態的最低事務ID。所有小于xmin 的事務IDs要么提交且可見,要么回滾并死亡。 |
xmax
| 比最高完成的事務ID還高出一個值。所有大于或等于xmax 的事務IDs到快照時還沒有完成,因此不可見。 |
xip_list
| 快照時正在進行的事務。一個事務ID為xmin <= X < xmax 且不在快照時已經完成的列表中,因此根據其提交狀態,該事務ID要么是可見的,要么是死的。此列表不包括子事務的事務IDs。 |
在本數據庫13以前的版本中,沒有xid8
類型,因此提供了這些函數的變體,使用bigint
表示64位 XID,并相應地提供不同的快照數據類型txid_snapshot
。 這些舊的函數在它們的名字中有txid
。 它們仍然支持向后兼容性,但可能會從未來的版本中刪除。
已棄用的事務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() . |
已提交事務信息函數表中的函數提供了關于過去的事務何時被提交的信息。 它們只在啟用 track_commit_timestamp 配置選項時提供有用的數據,并且只針對在啟用該選項后提交的事務。
已提交事務信息函數
pg_xact_commit_timestamp ( xid ) → timestamp with time zone 返回事務的提交時間戳。 |
pg_last_committed_xact () → record ( xid xid , timestamp timestamp with time zone ) 返回最近提交的事務的事務ID和提交時間戳。 |
控制數據函數表中所展示的函數能打印initdb
期間初始化的信息,例如目錄版本。 它們也能顯示有關預寫式日志和檢查點處理的信息。這些信息是集簇范圍內的,不與任何特定的一個數據庫相關。 這些函數提供大致相同的信息,對于同一種來源,就像pg_controldata應用。
控制數據函數
pg_control_checkpoint () → record 返回有關當前檢查點狀態的信息。 |
pg_control_system () → record 返回有關當前控制文件狀態的信息。 |
pg_control_init () → record 返回有關集群初始化狀態的信息。 |
pg_control_recovery () → record 返回有關恢復狀態的信息。 |
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
| 帶時區的時間戳
|
pg_control_system
輸出列
列名稱 | 數據類型 |
pg_control_version
| integer
|
catalog_version_no
| integer
|
system_identifier
| bigint
|
pg_control_last_modified
| timestamp with time zone
|
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
|
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
|