W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
表 9.63展示了多個可以抽取會話和系統(tǒng)信息的函數(shù)。
除了本節(jié)列出的函數(shù),還有一些與統(tǒng)計系統(tǒng)相關(guān)的函數(shù)也提供系統(tǒng)信息。詳見第 27.2.2 節(jié)。
表 9.63. 會話信息函數(shù)
函數(shù) 描述 |
---|
返回當(dāng)前數(shù)據(jù)庫的名稱。(在SQL標準中數(shù)據(jù)庫被稱為“catalogs”,因此 |
返回當(dāng)前所執(zhí)行查詢的文本,由客戶端提交的(可能包含一個以上的語句)。 |
這個等同于 |
返回在搜索路徑中的第一個模式的名稱(如果搜索路徑為空則返回空值)。 這個模式將用于沒有指定目標模式就創(chuàng)建的任何表或其他已命名對象。 |
返回當(dāng)前在有效搜索路徑中的所有模式的名稱的數(shù)組,以優(yōu)先級順序。 (當(dāng)前 search_path設(shè)置中與已存在的、可搜索模式不相符的項將被省略。) 如果布爾參數(shù)為 |
返回當(dāng)前執(zhí)行上下文的用戶名。 |
返回當(dāng)前客戶端的IP地址,如果當(dāng)前連接是通過Unix-域套接字則返回 |
返回當(dāng)前客戶端的IP端口號,如果當(dāng)前連接是通過Unix-域套接字則返回 |
返回服務(wù)器接受當(dāng)前連接的IP地址,如果當(dāng)前連接是通過Unix-域套接字則返回 |
返回服務(wù)器接受當(dāng)前連接的IP端口號,如果當(dāng)前連接是通過Unix-域套接字則返回 |
返回附加到當(dāng)前會話的服務(wù)器進程的進程ID。 |
返回阻止服務(wù)器進程的會話的進程ID數(shù)組,該進程ID與指定的進程ID一起獲取鎖定,如果沒有這樣的服務(wù)器進程或者沒有被阻塞,則返回一個空數(shù)組。 如果一個服務(wù)器進程持有一個與被阻塞進程的鎖請求沖突的鎖(硬阻塞),或者正在等待一個與被阻塞進程的鎖請求沖突并且在等待隊列中位于其前面的鎖(軟阻塞),那么這個服務(wù)器進程就會阻塞另一個服務(wù)器進程。 當(dāng)使用并行查詢時結(jié)果總是列出客戶端可見的進程ID(即 頻繁調(diào)用這個函數(shù)可能會對數(shù)據(jù)庫性能產(chǎn)生一些影響,因為它需要在短時間內(nèi)獨占訪問鎖管理器的共享狀態(tài)。 |
返回服務(wù)器配置文件最后加載的時間。如果當(dāng)前會話當(dāng)時是活躍的,那么這將是會話本身重新讀取配置文件的時間(因此在不同的會話中讀取會稍有不同)。 否則,就是postmaster進程重新讀取配置文件的時間。 |
返回日志采集器當(dāng)前使用的日志文件的路徑名。該路徑包括log_directory目錄和單個日志文件名。 如果日志采集器被禁用,結(jié)果為 |
返回當(dāng)前會話的臨時模式的OID,如果沒有則返回0(因為它沒有創(chuàng)建任何臨時表)。 |
如果給定的OID是另一個會話的臨時模式的OID則返回真。(這可能是有用的,例如,在目錄顯示中排除其他會話的臨時表。) |
返回當(dāng)前會話正在偵聽的異步通知通道的名稱集。 |
返回當(dāng)前被等待處理的通知所占用的異步通知隊列最大尺寸的分數(shù)(0–1)。更多信息請參見LISTEN 和 NOTIFY。 |
返回服務(wù)器啟動時的時間。 |
返回一個進程ID數(shù)組,該進程ID是阻塞服務(wù)器進程獲取安全快照的會話的進程ID數(shù)組,如果沒有這樣的服務(wù)器進程或者沒有阻塞,則返回一個空數(shù)組。 運行 頻繁調(diào)用這個函數(shù)可能會對數(shù)據(jù)庫性能產(chǎn)生一些影響,因為它需要在短時間內(nèi)訪問謂詞鎖管理器的共享狀態(tài)。 |
返回當(dāng)前嵌套層次的PostgreSQL觸發(fā)器(如果沒有調(diào)用則為 0,直接或間接,從一個觸發(fā)器內(nèi)部開始)。 |
返回會話用戶名. |
這個相當(dāng)于 |
返回描述PostgreSQL服務(wù)器的版本的字符串。 你還可以從 server_version中獲得此信息,或者對于機器可讀的版本,使用server_version_num。
軟件開發(fā)人員可以使用 |
current_catalog
、current_role
、current_schema
、current_user
、session_user
和user
在
SQL里有特殊的語意狀態(tài): 它們被調(diào)用時結(jié)尾不要跟著園括號。 在 PostgreSQL 中,圓括號可以有選擇性地被用于current_schema
,但是不能和其他的一起用。
session_user
通常是發(fā)起當(dāng)前數(shù)據(jù)庫連接的用戶,不過超級用戶可以用SET SESSION AUTHORIZATION修改這個設(shè)置。 current_user
是用于權(quán)限檢查的用戶標識。通常,
它總是等于會話用戶,但是可以被SET ROLE改變。 它也會在函數(shù)執(zhí)行的過程中隨著屬性SECURITY DEFINER
的改變而改變。 在 Unix 的說法里,那么會話用戶是“真實用戶”,而當(dāng)前用戶是
“有效用戶”。 current_role
以及user
是current_user
的同義詞(SQL標準在current_role
和current_user
之間做了區(qū)分,但
PostgreSQL不區(qū)分,因為它把用戶和角色統(tǒng)一成了一種實體)。
表 9.64列出那些允許編程查詢對象訪問權(quán)限的函數(shù)。參閱第 5.7 節(jié)獲取更多有關(guān)權(quán)限的信息。 在這些函數(shù)中,可以通過名稱或OID
(pg_authid
.oid
)指定被查詢權(quán)限的用戶,或者如果名稱被指定為public
,則檢查PUBLIC偽角色的權(quán)限。 同樣,user
參數(shù)可以完全省略,在這種情況下,假設(shè)為current_user
。被查詢的對象也可以通過名稱或OID來指定。
通過名稱指定時,可以包含相關(guān)的模式名稱。感興趣的訪問權(quán)限由一個文本字符串指定,它必須計算為對象類型的一個適當(dāng)?shù)臋?quán)限關(guān)鍵字(例如,SELECT
)。 還可以將 WITH GRANT OPTION
添加到特權(quán)類型中,以測試該特權(quán)是否由授予選項持有。 同樣,可以用逗號分隔列出多個特權(quán)類型,在這種情況下,如果所列出的特權(quán)中有任何一個被持有,結(jié)果將為真。 (特權(quán)字符串的大小寫不重要,特權(quán)名之間允許有額外的空格,但在特權(quán)名中不允許。)一些例子:
SELECT has_table_privilege('myschema.mytable', 'select'); SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');
表 9.64. 訪問權(quán)限查詢函數(shù)
函數(shù) 描述 |
---|
用戶是否對表的任何列有權(quán)限? 如果對整個表持有特權(quán),或者對至少一個列有列級的特權(quán)授予,則會成功。 允許的權(quán)限類型為 |
用戶對指定的表列有特權(quán)么?如果對整個表持有特權(quán),或者對列授予了列級別的特權(quán),則會成功。 可以通過名稱或?qū)傩跃幪? |
用戶對數(shù)據(jù)庫有特權(quán)嗎?允許的特權(quán)類型為 |
用戶是否擁有外部數(shù)據(jù)包裝的特權(quán)?唯一允許的特權(quán)類型是 |
用戶對函數(shù)有特權(quán)嗎?唯一允許的特權(quán)類型是 當(dāng)通過名稱而不是OID指定函數(shù)時,允許的輸入與
|
用戶對語言有特權(quán)嗎?唯一允許的特權(quán)類型是 |
用戶對模式有特權(quán)嗎?允許的特權(quán)類型是 |
用戶是否有順序特權(quán)?允許的特權(quán)類型有 |
用戶是否對外部服務(wù)器有特權(quán)?唯一允許的特權(quán)類型是 |
用戶對表有特權(quán)嗎?允許的特權(quán)類型有 |
用戶對表空間有特權(quán)嗎?唯一允許的特權(quán)類型是 |
用戶對數(shù)據(jù)類型有特權(quán)嗎?唯一允許的特權(quán)類型是 |
用戶對角色有特權(quán)么?允許的特權(quán)類型是 |
在當(dāng)前用戶和當(dāng)前環(huán)境的上下文之中,指定表的行級安全是活動的嗎? |
表 9.65 顯示了aclitem
類型的可用操作符,它是訪問權(quán)限的目錄表示。 有關(guān)如何讀取訪問權(quán)限值的信息,請參閱 第 5.7 節(jié)。
表 9.65. aclitem
操作符
表 9.66 顯示了一些額外的函數(shù)來管理aclitem
類型。
表 9.66. aclitem
函數(shù)
函數(shù) 描述 |
---|
構(gòu)造一個 |
以行集的形式返回 |
使用給定的屬性構(gòu)造 |
表 9.67展示了決定是否一個特定對象在當(dāng)前模式搜索路徑中可見的函數(shù)。 例如,如果一個表所在的模式在當(dāng)前搜索路徑中并且在它之前沒有出現(xiàn)過相同的名字,這個表就被說是可見的。 這等價于在語句中表可以被用名稱引用但不加顯式的模式限定。因此,要列出所有可見表的名字:
SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
對于函數(shù)和操作符,如果路徑前面沒有相同名稱and argument data type(s)的對象,那么搜索路徑中的對象就是可見的。 對于操作符類和操作符族,要考慮名稱和關(guān)聯(lián)的索引訪問方法。
表 9.67. 模式可見性查詢函數(shù)
所有這些函數(shù)都要求用對象 OID 來標識將被檢查的對象。如果你想用名稱來測試一個對象,使用 OID 別名類型(regclass
、regtype
、regprocedure
、regoperator
、regconfig
或regdictionary
)將會很方便。例如:
SELECT pg_type_is_visible('myschema.widget'::regtype);
注意以這種方式測試一個非模式限定的類型名沒什么意義 — 如果該名稱完全能被識別,它必須是可見的。
表 9.68 列出從系統(tǒng)目錄中提取信息的函數(shù)。
表 9.68. 系統(tǒng)目錄信息函數(shù)
函數(shù) 描述 |
---|
返回由其類型OID和可能的類型修飾符標識的數(shù)據(jù)類型的SQL名稱。如果沒有已知的類型修飾符,則傳遞NULL值給類型修飾符。 |
重構(gòu)為了約束的創(chuàng)建命令。(這是一個反編譯的重構(gòu),而不是命令的原始文本。) |
反編譯存儲在系統(tǒng)目錄中的表達式的內(nèi)部形式,例如列的默認值。 如果表達式可能包含變量,則指定它們所指向的關(guān)系的OID作為第二個參數(shù);如果沒有預(yù)期的變量,傳遞0就可以了。 |
重構(gòu)為了函數(shù)或過程的創(chuàng)建命令。(這是一個反編譯的重構(gòu),而不是命令的原始文本。) 結(jié)果是一個完整的 |
重新構(gòu)造函數(shù)或過程的參數(shù)列表,以其在 |
重新構(gòu)造標識函數(shù)或過程所需的參數(shù)列表,以其應(yīng)出現(xiàn)在 |
重構(gòu)函數(shù)的 |
重構(gòu)針對索引的創(chuàng)建命令。(這是一個反編譯的重構(gòu),而不是命令的原始文本。)如果提供了 |
返回一組描述服務(wù)器識別的SQL關(guān)鍵字的記錄。 |
重構(gòu)針對規(guī)則的創(chuàng)建命令。(這是一個反編譯的重構(gòu),而不是命令的原始文本。) |
返回與列相關(guān)聯(lián)的序列名稱,如果沒有序列與該列相關(guān)聯(lián)則返回NULL。 如果列是標識列,則關(guān)聯(lián)序列是在內(nèi)部為該列創(chuàng)建的序列。 對于使用一種串行類型( 典型的用法是讀取序列的當(dāng)前值以獲取標識或串行列,示例如下:
|
重構(gòu)針對擴展統(tǒng)計對象的創(chuàng)建命令。(這是一個反編譯的重構(gòu),而不是命令的原始文本。) |
重構(gòu)針對觸發(fā)器的創(chuàng)建命令。(這是一個反編譯的重構(gòu),而不是命令的原始文本。) |
根據(jù)OID返回角色名。 |
重構(gòu)針對視圖或物化視圖的 |
重構(gòu)針對視圖或物化視圖的底層 |
根據(jù)視圖的文本名稱而不是它的OID,重構(gòu)針對視圖或物化視圖的底層 |
測試一個索引列是否具有命名屬性。表 9.69列出了常用索引列屬性。 (注意,擴展訪問方法可以為其索引定義額外的屬性名。) 如果屬性名未知或不適用于特定對象,或者OID或列號不能識別有效的對象,則返回 |
測試一個索引是否具有命名屬性。表 9.70列出了常用的索引屬性。 (注意,擴展訪問方法可以為其索引定義額外的屬性名。) 如果屬性名未知或不適用于特定對象,或者OID不能識別有效的對象,則返回 |
測試索引訪問方法是否具有命名屬性。訪問方法屬性如表 9.71所示。 如果屬性名未知或不適用于特定對象,或者OID不能識別有效的對象,則返回 |
返回源自 |
返回具有存儲在指定表空間中的對象的數(shù)據(jù)庫的OIDs集。 如果這個函數(shù)返回了任何行,那么表空間就不是空的,且不能被刪除。 要識別填充表空間的特定對象,需要連接到由 |
返回表空間所在的文件系統(tǒng)路徑。 |
返回傳遞值給它的數(shù)據(jù)類型的OID。這對于故障排除或動態(tài)構(gòu)造SQL查詢很有幫助。 函數(shù)聲明為返回 例如:
|
返回傳遞值給它的排序規(guī)則的名稱。如果需要,該值會被引號括起來,并使用模式限定。 如果沒有為參數(shù)表達式派生排序規(guī)則,則返回 例如:
|
將文本關(guān)系名轉(zhuǎn)換為它的OID。通過將字符串類型轉(zhuǎn)換為 |
將文本排序規(guī)則名稱轉(zhuǎn)換為它的OID。通過將字符串類型轉(zhuǎn)換為 |
將文本模式名轉(zhuǎn)換為它的OID。通過將字符串轉(zhuǎn)換為 |
將文本操作符名稱轉(zhuǎn)換為它的OID。通過將字符串類型轉(zhuǎn)換為 |
將文本操作符名稱(帶有參數(shù)類型)轉(zhuǎn)換為其OID。通過將字符串轉(zhuǎn)換為 |
將文本函數(shù)或過程名轉(zhuǎn)換為其OID。通過將字符串轉(zhuǎn)換為 |
將文本函數(shù)或過程名(帶有參數(shù)類型)轉(zhuǎn)換為其OID。通過將字符串類型轉(zhuǎn)換為 |
將文本角色名轉(zhuǎn)換為它的OID。通過將字符串類型轉(zhuǎn)換為 |
將文本類型名轉(zhuǎn)換為它的OID。通過將字符串類型轉(zhuǎn)換為 |
大多數(shù)重構(gòu)(反編譯)數(shù)據(jù)庫對象的函數(shù)都有一個可選的 pretty
標志,如果為true
,結(jié)果將被“pretty-printed”。 美觀打印會抑制不必要的圓括號,并為易讀性增加空格。 美觀打印的格式可讀性更好,但是默認格式更有可能被PostgreSQL的未來版本以同樣的方式解釋;
因此,避免為轉(zhuǎn)儲目的使用美觀打印的輸出。為pretty
參數(shù)傳遞false
會產(chǎn)生與省略參數(shù)相同的結(jié)果。
表 9.69. 索引列屬性
名稱 | 描述 |
---|---|
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 搜索? |
表 9.70. 索引性質(zhì)
名稱 | 描述 |
---|---|
clusterable
|
索引是否可以用于CLUSTER 命令? |
index_scan
|
索引是否支持普通掃描(非位圖)? |
bitmap_scan
|
索引是否支持位圖掃描? |
backward_scan
|
在掃描中掃描方向能否被更改(為了支持游標上無需物化的FETCH BACKWARD )? |
表 9.71. 索引訪問方法性質(zhì)
名稱 | 描述 |
---|---|
can_order
|
訪問方法是否支持ASC 、DESC 以及CREATE INDEX 中的有關(guān)關(guān)鍵詞? |
can_unique
|
訪問方法是否支持唯一索引? |
can_multi_col
|
訪問方法是否支持多列索引? |
can_exclude
|
訪問方法是否支持排除約束? |
can_include
|
訪問方法是否支持CREATE INDEX 的INCLUDE 子句? |
表 9.72列出了與數(shù)據(jù)庫對象 標識和定位有關(guān)的函數(shù)。
表 9.72. 對象信息和定位函數(shù)
表 9.73中展示的函數(shù)抽取注釋,注釋是由COMMENT命令在以前存儲的。如果對指定參數(shù)找不到注釋,則返回空值。
表 9.73. 注釋信息函數(shù)
表 9.74中展示的函數(shù)以一種可導(dǎo)出的形式提供了服務(wù)器事務(wù)信息。 這些函數(shù)的主要用途是判斷在兩個快照之間哪些事務(wù)被提交。
表 9.74. 事務(wù)ID和快照信息功能
函數(shù) 描述 |
---|
返回當(dāng)前事務(wù)的ID。如果當(dāng)前事務(wù)還沒有一個ID(因為它還沒有執(zhí)行任何數(shù)據(jù)庫更新),它將分配一個新的事務(wù)。 |
返回當(dāng)前事務(wù)的ID,如果還沒有分配ID則返回 |
報告最近的事務(wù)的提交狀態(tài)。如果事務(wù)為最近的,系統(tǒng)會保留事務(wù)的提交狀態(tài),則結(jié)果是 |
返回當(dāng)前snapshot,顯示哪些事務(wù)IDs正在進行中的數(shù)據(jù)結(jié)構(gòu)。 |
返回快照中包含的正在進行的事務(wù)IDs集。 |
返回快照的 |
返回快照的 |
根據(jù)此快照,給定的事務(wù)ID是否可見(visible)(也就是說,它是否在快照拍攝之前完成)? 注意,這個函數(shù)不會給出子事務(wù)ID的正確答案。 |
內(nèi)部事務(wù)ID類型xid
是32位寬的,可捆卷(wraps around)每40億個事務(wù)。 但是,表 9.74中所示的函數(shù)使用的是64位類型的xid8
,它在安裝過程中不捆卷(wraps
around),如果需要,可以通過強制轉(zhuǎn)換將其轉(zhuǎn)換為xid
。 數(shù)據(jù)類型pg_snapshot
存儲特定時刻事務(wù)ID可見性的信息。 其組成如表 9.75所描述。pg_snapshot
的文本表示形式是
。 例如xmin
:xmax
:xip_list
10:20:10,14,15
表示xmin=10, xmax=20, xip_list=10, 14, 15
。
表 9.75. 快照組件
名稱 | 描述 |
---|---|
xmin
|
仍然處于活動狀態(tài)的最低事務(wù)ID。所有小于xmin 的事務(wù)IDs要么提交且可見,要么回滾并死亡。 |
xmax
|
比最高完成的事務(wù)ID還高出一個值。所有大于或等于xmax 的事務(wù)IDs到快照時還沒有完成,因此不可見。 |
xip_list
|
快照時正在進行的事務(wù)。一個事務(wù)ID為xmin <= 且不在快照時已經(jīng)完成的列表中,因此根據(jù)其提交狀態(tài),該事務(wù)ID要么是可見的,要么是死的。此列表不包括子事務(wù)的事務(wù)IDs。 |
在PostgreSQL13以前的版本中,沒有xid8
類型,因此提供了這些函數(shù)的變體,使用bigint
表示64位XID,并相應(yīng)地提供不同的快照數(shù)據(jù)類型txid_snapshot
。 這些舊的函數(shù)在它們的名字中有txid
。 它們?nèi)匀恢С窒蚝蠹嫒菪?,但可能會從未來的版本中刪除。參見
表 9.76。
表 9.76. 已棄用的事務(wù)ID和快照信息功能
表 9.77中的函數(shù)提供了關(guān)于過去的事務(wù)何時被提交的信息。 它們只在啟用track_commit_timestamp配置選項時提供有用的數(shù)據(jù),并且只針對在啟用該選項后提交的事務(wù)。
表 9.77. 已提交事務(wù)信息函數(shù)
表 9.78中所展示的函數(shù)能打印initdb
期間初始化的信息,例如目錄版本。 它們也能顯示有關(guān)預(yù)寫式日志和檢查點處理的信息。這些信息是集簇范圍內(nèi)的,不與任何特定的一個數(shù)據(jù)庫相關(guān)。 這些函數(shù)提供大致相同的信息,對于同一種來源,就像
pg_controldata
應(yīng)用。
表 9.78. 控制數(shù)據(jù)函數(shù)
表 9.79. pg_control_checkpoint
輸出列
列名稱 | 數(shù)據(jù)類型 |
---|---|
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
|
帶時區(qū)的時間戳
|
表 9.80. pg_control_system
輸出列
列名稱 | 數(shù)據(jù)類型 |
---|---|
pg_control_version
|
integer
|
catalog_version_no
|
integer
|
system_identifier
|
bigint
|
pg_control_last_modified
|
timestamp with time zone
|
表 9.81. pg_control_init
輸出列
列名稱 | 數(shù)據(jù)類型 |
---|---|
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.82. pg_control_recovery
輸出列
列名稱 | 數(shù)據(jù)類型 |
---|---|
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
|
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: