日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

系統信息函數和運算符

本文介紹了PolarDB PostgreSQL版(兼容Oracle)支持的系統信息函數和運算符。

會話信息函數表展示了多個可以抽取會話和系統信息的函數。除了本節列出的函數,還有一些與統計系統相關的函數也提供系統信息。 會話信息函數

current_catalogname

current_database () → name

返回當前數據庫的名稱。(在SQL標準中數據庫被稱為“catalogs”,因此current_catalog是該標準的拼寫方式)

current_query () → text

返回當前所執行查詢的文本,由客戶端提交的(可能包含一個以上的語句)。

current_rolename

這個等同于 current_user

current_schemaname

current_schema () → name

返回在搜索路徑中的第一個模式的名稱(如果搜索路徑為空則返回空值)。 這個模式將用于沒有指定目標模式就創建的任何表或其他已命名對象。

current_schemas ( include_implicit boolean ) → name[]

返回當前在有效搜索路徑中的所有模式的名稱的數組,以優先級順序。如果布爾參數為true,則類似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一起獲取鎖定,如果沒有這樣的服務器進程或者沒有被阻塞,則返回一個空數組。

如果一個服務器進程持有一個與被阻塞進程的鎖請求沖突的鎖(硬阻塞),或者正在等待一個與被阻塞進程的鎖請求沖突并且在等待隊列中位于其前面的鎖(軟阻塞),那么這個服務器進程就會阻塞另一個服務器進程。 當使用并行查詢時結果總是列出客戶端可見的進程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將返回在有序列表中找到的第一種格式的文件路徑:stderrcsvlog。 如果沒有日志文件具有任何這些格式,則返回NULL。 要請求關于特定日志文件格式的信息,可以提供 csvlogstderr作為可選參數的值。 如果在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_username

返回會話用戶名.

username

這個相當于 current_user

version () → text

返回描述本數據庫服務器的版本的字符串。

重要

current_catalogcurrent_rolecurrent_schemacurrent_usersession_useruser在 SQL 里有特殊的語意狀態: 它們被調用時結尾不要跟著園括號。 在 PostgreSQL 中,圓括號可以有選擇性地被用于current_schema,但是不能和其他的一起用。

session_user通常是發起當前數據庫連接的用戶,不過超級用戶可以用SET SESSION AUTHORIZATION修改這個設置。 current_user是用于權限檢查的用戶標識。通常, 它總是等于會話用戶,但是可以被SET ROLE改變。 它也會在函數執行的過程中隨著屬性SECURITY DEFINER的改變而改變。 在 Unix 的說法里,那么會話用戶是“真實用戶”,而當前用戶是“有效用戶”。 current_role以及usercurrent_user的同義詞(SQL 標準在current_rolecurrent_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

用戶對模式有特權嗎?允許的特權類型是CREATEUSAGE

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

用戶對角色有特權么?允許的特權類型是MEMBERUSAGEMEMBER表示角色中的直接或間接成員關系(即執行SET ROLE的權利),而USAGE表示不執行SET ROLE情況下是否立即可用角色的特權。 此函數不允許特殊情況下將user設置為public,因為PUBLIC偽角色永遠不能成為真實角色的成員。

row_security_active ( table text or oid ) → boolean

在當前用戶和當前環境的上下文之中,指定表的行級安全是活動的嗎?

aclitem 操作符表顯示了aclitem類型的可用操作符,它是訪問權限的目錄表示。

aclitem 操作符

aclitem = aclitemboolean

aclitem相等嗎?(注意,aclitem類型缺少比較操作符的通常集合;它只有相等。 反而言之,aclitem數組只能進行相等比較)。

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

aclitem[] @> aclitemboolean

數組是否包含指定的特權?(如果有一個數組條目與aclitem的被授權人和授予人相匹配,并且至少具有特權的指定集,則此選項為真)。

'{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

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

aclitem 函數

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

構造一個aclitem數組,該數組持有type類型對象的默認訪問特權,該對象屬于OID為ownerId的角色。 這表示當對象的ACL條目為空時所假定的訪問特權。 type 參數必須是下列中的一個 'c' 對應 COLUMN, 'r' 對應 TABLE 和類表對象, 's' 對應 SEQUENCE, 'd' 對應 DATABASE, 'f' 對應 FUNCTIONPROCEDURE, 'l' 對應 LANGUAGE, 'L' 對應 LARGE OBJECT, 'n' 對應 SCHEMA, '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列中用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 別名類型(regclassregtyperegprocedureregoperatorregconfigregdictionary)將會很方便。例如:

    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 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", 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.reloptionspg_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 NULLIS NOT NULL搜索?

索引性質

名稱

描述

clusterable

索引是否可以用于CLUSTER命令?

index_scan

索引是否支持普通掃描(非位圖)?

bitmap_scan

索引是否支持位圖掃描?

backward_scan

在掃描中掃描方向能否被更改(為了支持游標上無需物化的FETCH BACKWARD)?

索引訪問方法性質

名稱

描述

can_order

訪問方法是否支持ASCDESC以及CREATE INDEX中的有關關鍵詞?

can_unique

訪問方法是否支持唯一索引?

can_multi_col

訪問方法是否支持多列索引?

can_exclude

訪問方法是否支持排除約束?

can_include

訪問方法是否支持CREATE INDEXINCLUDE子句?

對象信息和定位函數表列出了與數據庫對象標識和定位有關的函數。

對象信息和定位函數

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_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的反向函數。

注釋信息函數表中展示的函數抽取注釋,注釋是由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 progresscommittedaborted。 如果該事務的時間足夠久,并且系統中沒有對該事務的引用,而且提交狀態信息已經被丟棄,則結果為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