?
? ????? PHP ??? ???? ??? ?? ??
Table 9-47顯示了幾個(gè)提取會(huì)話及系統(tǒng)信息的函數(shù)
另外在本節(jié)所列出的函數(shù),有一些函數(shù)有關(guān)統(tǒng)計(jì)系統(tǒng),也提供系統(tǒng)信息。參閱Section 27.2.2獲取更多信息。
Table 9-47. 會(huì)話信息函數(shù)
名稱(chēng) | 返回類(lèi)型 | 描述 |
---|---|---|
current_catalog |
name | 當(dāng)前數(shù)據(jù)庫(kù)名(在SQL標(biāo)準(zhǔn)里叫"catalog") |
current_database() |
name | 當(dāng)前數(shù)據(jù)庫(kù)名 |
current_schema [()] |
name | 當(dāng)前模式名 |
current_schemas(boolean) |
name[] | 搜索路徑中的模式名字,包括可選的隱式模式 |
current_user |
name | 當(dāng)前執(zhí)行環(huán)境下的用戶(hù)名 |
current_query() |
text | 執(zhí)行當(dāng)前的文本查詢(xún),由客戶(hù)端提交(可能包含多于1句) |
pg_backend_pid() |
int | 連接到當(dāng)前會(huì)話的服務(wù)器進(jìn)程 ID |
pg_listening_channels() |
setof text | 正在偵聽(tīng)的當(dāng)前會(huì)話的信道名稱(chēng) |
inet_client_addr() |
inet | 連接的遠(yuǎn)端地址 |
inet_client_port() |
int | 連接的遠(yuǎn)端端口 |
inet_server_addr() |
inet | 連接的本地地址 |
inet_server_port() |
int | 連接的本地端口 |
pg_my_temp_schema() |
oid | 會(huì)話的臨時(shí)模式的OID ,不存在則為 0 |
pg_is_other_temp_schema(oid) |
boolean | 是否為另一個(gè)會(huì)話的臨時(shí)模式? |
pg_postmaster_start_time() |
timestamp with time zone | 服務(wù)器啟動(dòng)時(shí)間 |
pg_conf_load_time() |
timestamp with time zone | 配置加載時(shí)間 |
session_user |
name | 會(huì)話用戶(hù)名 |
user |
name | 等價(jià)于current_user
|
version() |
text | PostgreSQL版本信息 |
Note:
current_catalog
,current_schema
,current_user
,session_user
和user
在SQL有特殊的語(yǔ)法: 調(diào)用他們后面必須不加括號(hào)。 (在 PostgreSQL,current_schema
括號(hào)是可選的,但是其它的不是。)
session_user
通常是連接當(dāng)前數(shù)據(jù)庫(kù)的初始用戶(hù),不過(guò)超級(jí)用戶(hù)可以
用 SET SESSION AUTHORIZATION 修改這個(gè)設(shè)置。current_user
是用于權(quán)限
檢查的用戶(hù)標(biāo)識(shí)。通常,它總是等于會(huì)話用戶(hù),但是可以通過(guò)SET ROLE改變它。
在函數(shù)執(zhí)行的過(guò)程中隨著屬性SECURITY DEFINER的改變,其值也會(huì)改變。
用 Unix 術(shù)語(yǔ)來(lái)說(shuō),會(huì)話用戶(hù)是"真實(shí)用戶(hù)"real user"",而當(dāng)前用戶(hù)是"有效用戶(hù)"effective user""。
current_schema
返回在搜索路徑前端的模式名字(如果搜索路徑為空則返回 NULL)。
如果創(chuàng)建表或者其它命名對(duì)象時(shí)沒(méi)有聲明目標(biāo)模式,那么它將是用于這些對(duì)象的模式。
current_schemas(boolean)
返回一個(gè)搜索路徑中所有模式名字的數(shù)組。布爾選項(xiàng)決定
像pg_catalog這樣隱含包含的系統(tǒng)模式是否包含在返回的搜索路徑中。
Note: 搜索路徑可以通過(guò)運(yùn)行時(shí)設(shè)置更改。命令是:
SET search_path TOschema[,schema, ...]
pg_listening_channels
返回當(dāng)前會(huì)話正在監(jiān)聽(tīng)的一組信道名稱(chēng)。見(jiàn)LISTEN獲取更多信息。
inet_client_addr
返回當(dāng)前客戶(hù)端的IP地址,而inet_client_port
則
返回當(dāng)前客戶(hù)端的端口號(hào)。inet_server_addr
返回服務(wù)器接收當(dāng)前連接用的 IP
地址,而inet_server_port
返回接收當(dāng)前連接的端口號(hào)。
如果是通過(guò) Unix-domain socket 連接的,那么所有這些函數(shù)都返回 NULL 。
pg_my_temp_schema
返回當(dāng)前會(huì)話的臨時(shí)模式 OID ,如果不存在的話則
返回 0(因?yàn)闆](méi)有創(chuàng)建任何臨時(shí)表)。pg_is_other_temp_schema
返回給定
的 OID 是否為其它會(huì)話的臨時(shí)模式 OID ,
這個(gè)函數(shù)是有實(shí)用價(jià)值的,比如,在顯示一個(gè)目錄的時(shí)候排除掉其它會(huì)話的臨時(shí)表
pg_postmaster_start_time
返回服務(wù)器啟動(dòng)時(shí)的timestamp with time zone。
pg_conf_load_time
返回最后載服務(wù)器配置文件的時(shí)間戳。
(如果當(dāng)前會(huì)話時(shí)還活著,將是當(dāng)前會(huì)話本身重新讀取配置文件的時(shí)間,所以讀取的時(shí)間會(huì)在不同的會(huì)話中稍微有所不同。
否則,它是postmaster進(jìn)程重新讀取配置文件的時(shí)間。)
version
返回一個(gè)描述PostgreSQL服務(wù)器版本信息的字符串。
Table 9-48列出那些允許用戶(hù)在程序里查詢(xún) 對(duì)象訪問(wèn)權(quán)限的函數(shù)。參閱Section 5.6獲取更多有關(guān)權(quán)限的信息
Table 9-48. 訪問(wèn)權(quán)限查詢(xún)函數(shù)
名稱(chēng) | 返回類(lèi)型 | 描述 |
---|---|---|
has_any_column_privilege (user,
table,
privilege)
|
boolean | 指定用戶(hù)有沒(méi)有訪問(wèn)表任何列的權(quán)限 |
has_any_column_privilege (table,
privilege)
|
boolean | 當(dāng)前用戶(hù)有沒(méi)有訪問(wèn)表任何列的權(quán)限 |
has_column_privilege (user,
table,
column,
privilege)
|
boolean | 指定用戶(hù)有沒(méi)有訪問(wèn)列的權(quán)限 |
has_column_privilege (table,
column,
privilege)
|
boolean | 當(dāng)前用戶(hù)有沒(méi)有訪問(wèn)列的權(quán)限 |
has_database_privilege (user,
database,
privilege)
|
boolean | 指定用戶(hù)是否有訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限 |
has_database_privilege (database,
privilege)
|
boolean | 當(dāng)前用戶(hù)是否有訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限 |
has_foreign_data_wrapper_privilege (user,
fdw,
privilege)
|
boolean | does user have privilege for foreign-data wrapper |
has_foreign_data_wrapper_privilege (fdw,
privilege)
|
boolean | does current user have privilege for foreign-data wrapper |
has_function_privilege (user,
function,
privilege)
|
boolean | 指定用戶(hù)是否有訪問(wèn)函數(shù)的權(quán)限 |
has_function_privilege (function,
privilege)
|
boolean | 當(dāng)前用戶(hù)是否有訪問(wèn)函數(shù)的權(quán)限 |
has_language_privilege (user,
language,
privilege)
|
boolean | 指定用戶(hù)是否有訪問(wèn)語(yǔ)言的權(quán)限 |
has_language_privilege (language,
privilege)
|
boolean | 當(dāng)前用戶(hù)是否有訪問(wèn)語(yǔ)言的權(quán)限 |
has_schema_privilege (user,
schema,
privilege)
|
boolean | 指定用戶(hù)是否有訪問(wèn)模式的權(quán)限 |
has_schema_privilege (schema,
privilege)
|
boolean | 當(dāng)前用戶(hù)是否有訪問(wèn)模式的權(quán)限 |
has_server_privilege (user,
server,
privilege)
|
boolean | 指定用戶(hù)是否有訪問(wèn)外部服務(wù)的權(quán)限 |
has_server_privilege (server,
privilege)
|
boolean | 當(dāng)前用戶(hù)是否有訪問(wèn)外部服務(wù)的權(quán)限 |
has_sequence_privilege (user,
sequence,
privilege)
|
boolean | 指定用戶(hù)是否有訪問(wèn)序列的權(quán)限 |
has_sequence_privilege (sequence,
privilege)
|
boolean | 當(dāng)前用戶(hù)是否有訪問(wèn)序列的權(quán)限 |
has_table_privilege (user,
table,
privilege)
|
boolean | 用戶(hù)是否有訪問(wèn)表的權(quán)限 |
has_table_privilege (table,
privilege)
|
boolean | 當(dāng)前用戶(hù)是否有訪問(wèn)表的權(quán)限 |
has_tablespace_privilege (user,
tablespace,
privilege)
|
boolean | 指定用戶(hù)是否有訪問(wèn)表空間的權(quán)限 |
has_tablespace_privilege (tablespace,
privilege)
|
boolean | 當(dāng)前用戶(hù)是否有訪問(wèn)該表空間的權(quán)限 |
pg_has_role (user,
role,
privilege)
|
boolean | 指定用戶(hù)是否有該角色的權(quán)限 |
pg_has_role (role,
privilege)
|
boolean | 當(dāng)前用戶(hù)是否有該角色的權(quán)限 |
has_table_privilege
檢查用戶(hù)是否可以用特定的方式訪問(wèn)表。
用戶(hù)可以指定為名或OID(pg_authid.oid),或如果缺省該參數(shù),則取current_user
的值。
表可以指定為名或OID。(因此,has_table_privilege
有六種變體,可以通過(guò)參數(shù)的個(gè)數(shù)和類(lèi)型區(qū)分它們。)
當(dāng)指定名時(shí),如果有必要,名字可以用模式限定的。想要的訪問(wèn)權(quán)限,由文本字符串指定,其必須為SELECT,INSERT,
UPDATE,DELETE,TRUNCATE,
REFERENCES或TRIGGER值之一。可選,可以添加WITH GRANT OPTION到權(quán)限類(lèi)型,
以測(cè)試權(quán)限是否擁有授權(quán)選項(xiàng)。 也可以由','分隔 多個(gè)權(quán)限類(lèi)型,如果擁有任何所列出的權(quán)限 ,則結(jié)果便為true。
(權(quán)限字符串不區(qū)分大小寫(xiě),權(quán)限名之間允許有額外空白但不屬于權(quán)限名的部分。)
一些例子:
SELECT has_table_privilege('myschema.mytable', 'select'); SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');
has_sequence_privilege
檢查用戶(hù)是否可以用特定的方式訪問(wèn)序列。參數(shù)可能與has_table_privilege
類(lèi)似。
想要的訪問(wèn)權(quán)限必須為USAGE,SELECT,或UPDATE。
has_any_column_privilege
檢查用戶(hù)是否可以用特定的方式訪問(wèn)表的任何列。
其參數(shù)可能與has_table_privilege
類(lèi)似,除了想要的權(quán)限類(lèi)型必須是SELECT,
INSERT,UPDATE, 或REFERENCES的一些值組合。
請(qǐng)注意,在表級(jí)別隱含任何這些特權(quán)授予它為每個(gè)表列,因此如果與has_table_privilege
參數(shù)相同,
has_any_column_privilege
總是返回true。但是如果有至少一列的列級(jí)權(quán)限授予也成功。
has_column_privilege
檢查用戶(hù)是否可以用特定的方式訪問(wèn)一列。
其可能的參數(shù)類(lèi)似于has_table_privilege
,帶有額外的指定列,其要么為列名或列號(hào)。
想要的權(quán)限類(lèi)型必須是SELECT,INSERT,UPDATE,
或REFERENCES的一些值組合。
請(qǐng)注意,在表級(jí)別隱含任何這些特權(quán)授予它為每個(gè)表列。
has_database_privilege
檢查一個(gè)用戶(hù)是否能以特定方式訪問(wèn)一個(gè)數(shù)據(jù)庫(kù)。
它可能的參數(shù)類(lèi)似has_table_privilege
。
權(quán)限類(lèi)型必須是CREATE,
CONNECT,
TEMPORARY,
TEMP(等價(jià)于TEMPORARY)之一。
has_function_privilege
檢查一個(gè)用戶(hù)是否能以特定方式訪問(wèn)一個(gè)函數(shù)。
它可能的參數(shù)類(lèi)似has_table_privilege
。我們聲明一個(gè)函數(shù)用的是文本字符
串而不是 OID ,允許的輸入和regprocedure
數(shù)據(jù)類(lèi)型一樣(參閱Section 8.16)。權(quán)限類(lèi)型必須是EXECUTE。
一個(gè)例子如下:
SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');
has_language_privilege
檢查一個(gè)用戶(hù)是否能以特定方式訪問(wèn)一個(gè)過(guò)程語(yǔ)言。
它可能的參數(shù)類(lèi)似has_table_privilege
。權(quán)限類(lèi)型必須是USAGE。
has_schema_privilege
檢查一個(gè)用戶(hù)是否能以特定方式訪問(wèn)一個(gè)模式。
它可能的參數(shù)類(lèi)似has_table_privilege
。權(quán)限類(lèi)型必須是CREATE或USAGE。
has_tablespace_privilege
檢查一個(gè)用戶(hù)是否能以特定方式訪問(wèn)一個(gè)表空間。
它可能的參數(shù)類(lèi)似has_table_privilege
。權(quán)限類(lèi)型必須是CREATE。
pg_has_role
檢查一個(gè)用戶(hù)是否能以特定方式訪問(wèn)一個(gè)角色。
它可能的參數(shù)類(lèi)似has_table_privilege
。權(quán)限類(lèi)型必須是MEMBER或USAGE。
MEMBER表示是角色中的直接或間接成員關(guān)系(也就是SET ROLE的權(quán)限),
而USAGE表示角色的權(quán)限是否無(wú)需SET ROLE即可立即生效。
Table 9-49顯示了那些判斷一個(gè)對(duì)象是否在當(dāng)前模式搜索路徑中可見(jiàn)的函數(shù)。 如果一個(gè)表所在的模式在搜索路徑中,并且沒(méi)有同名的表出現(xiàn)在搜索路徑的 更靠前的地方,那么就說(shuō)這個(gè)表是可見(jiàn)的。 它等效于表可以不帶明確模式修飾進(jìn)行引用。比如,要列出所有可見(jiàn)表的名字:
SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
Table 9-49. 模式可見(jiàn)性查詢(xún)函數(shù)
名稱(chēng) | 返回類(lèi)型 | 描述 |
---|---|---|
pg_conversion_is_visible(conversion_oid)
|
boolean | 該轉(zhuǎn)換是否在搜索路徑中可見(jiàn) |
pg_function_is_visible(function_oid)
|
boolean | 該函數(shù)是否在搜索路徑中可見(jiàn) |
pg_operator_is_visible(operator_oid)
|
boolean | 該操作符是否在搜索路徑中可見(jiàn) |
pg_opclass_is_visible(opclass_oid)
|
boolean | 該操作符類(lèi)是否在搜索路徑中可見(jiàn) |
pg_table_is_visible(table_oid)
|
boolean | 該表是否在搜索路徑中可見(jiàn) |
pg_ts_config_is_visible(config_oid)
|
boolean | 該文本檢索配置是否在搜索路徑中可見(jiàn) |
pg_ts_dict_is_visible(dict_oid)
|
boolean | 該文本檢索詞典是否在搜索路徑中可見(jiàn) |
pg_ts_parser_is_visible(parser_oid)
|
boolean | 該文本解析是否在搜索路徑中可見(jiàn) |
pg_ts_template_is_visible(template_oid)
|
boolean | 該文本檢索模板是否在搜索路徑中可見(jiàn) |
pg_type_is_visible(type_oid)
|
boolean | 該類(lèi)型 (或 域) 是否在搜索路徑中可見(jiàn)該類(lèi)型(域)是否在搜索路徑中可見(jiàn) |
每個(gè)函數(shù)執(zhí)行的一種類(lèi)型的數(shù)據(jù)庫(kù)對(duì)象的可見(jiàn)性檢查。
pg_table_is_visible
還可用于視圖、索引、序列。pg_type_is_visible
還可用于域。對(duì)于函數(shù)和操作符,如果在搜索路徑中沒(méi)有名字相同并且參數(shù)的數(shù)
據(jù)類(lèi)型也相同的對(duì)象出現(xiàn)在路徑中更靠前的位置,
那么該對(duì)象就是可見(jiàn)的。對(duì)于操作符類(lèi),則要同時(shí)考慮名字和相關(guān)的索引訪問(wèn)方法。
所有這些函數(shù)都需要使用 OID 來(lái)標(biāo)識(shí)要被檢查的對(duì)象。 如果你想通過(guò)名字測(cè)試對(duì)象,那么使用 OID 別名 類(lèi)型(regclass,regtype, regprocedure,regoperator,regconfig, orregdictionary)將會(huì)很方便。例如:
SELECT pg_type_is_visible('myschema.widget'::regtype);
請(qǐng)注意用這種方法測(cè)試一個(gè)未經(jīng)修飾的名字沒(méi)什么意義, 因?yàn)槿绻粋€(gè)名字可以被識(shí)別,那它首先必須是可見(jiàn)的。
Table 9-50列出了從系統(tǒng)表中提取信息的函數(shù)
Table 9-50. 系統(tǒng)表信息函數(shù)
名稱(chēng) | 返回類(lèi)型 | 描述 |
---|---|---|
format_type(type_oid,typemod) |
text | 獲取一個(gè)數(shù)據(jù)類(lèi)型的 SQL 名稱(chēng) |
pg_get_keywords() |
setof record | 獲取SQL關(guān)鍵字和類(lèi)別列表 |
pg_get_constraintdef(constraint_oid) |
text | 獲取一個(gè)約束的定義 |
pg_get_constraintdef(constraint_oid,pretty_bool) |
text | 獲取一個(gè)約束的定義 |
pg_get_expr(expr_text,relation_oid) |
text | 反編譯一個(gè)表達(dá)式的內(nèi)部形式,假設(shè)其中的任何 Var 都引用第二個(gè)參數(shù)指出的關(guān)系 |
pg_get_expr(expr_text,relation_oid,pretty_bool) |
text | 反編譯一個(gè)表達(dá)式的內(nèi)部形式,假設(shè)其中的任何 Var 都引用第二個(gè)參數(shù)指出的關(guān)系 |
pg_get_functiondef(func_oid) |
text | 獲取一個(gè)函數(shù)的定義 |
pg_get_function_arguments(func_oid) |
text | 獲取參數(shù)列表的函數(shù)定義 (帶默認(rèn)值) |
pg_get_function_identity_arguments(func_oid) |
text | 獲取參數(shù)列表的函數(shù)定義 (不帶默認(rèn)值) |
pg_get_function_result(func_oid) |
text | 獲取函數(shù)的RETURNS子句 |
pg_get_indexdef(index_oid) |
text | 獲取索引的CREATE INDEX命令 |
pg_get_indexdef(index_oid,column_no,pretty_bool) |
text | 獲取索引的CREATE INDEX命令,如果column_no不為零,則只獲取一個(gè)索引字段的定義。 |
pg_get_ruledef(rule_oid) |
text | 為規(guī)則獲取CREATE RULE命令 |
pg_get_ruledef(rule_oid,pretty_bool) |
text | 為規(guī)則獲取CREATE RULE命令 |
pg_get_serial_sequence(table_name,column_name) |
text | 獲取一個(gè)serial或bigserial字段使用的序列名 |
pg_get_triggerdef (trigger_oid) |
text | 為觸發(fā)器獲取CREATE [ CONSTRAINT ] TRIGGER命令 |
pg_get_triggerdef (trigger_oid,pretty_bool) |
text | getCREATE [ CONSTRAINT ] TRIGGERcommand for trigger |
pg_get_userbyid(role_oid) |
name | 獲取給定 OID 的角色名 |
pg_get_viewdef(view_name) |
text | 為視圖獲取底層的SELECT命令(已廢棄) |
pg_get_viewdef(view_name,pretty_bool) |
text | 為視圖獲取底層的SELECT命令(已廢棄) |
pg_get_viewdef(view_oid) |
text | 為視圖獲取底層的SELECT命令 |
pg_get_viewdef(view_oid,pretty_bool) |
text | 為視圖獲取底層的SELECT命令 |
pg_tablespace_databases(tablespace_oid) |
setof oid | 獲取在指定的表空間有對(duì)象的數(shù)據(jù)庫(kù) OID 集合 |
pg_typeof(any) |
regtype | 獲取任何值的數(shù)據(jù)類(lèi)型 |
format_type
通過(guò)某個(gè)數(shù)據(jù)類(lèi)型的類(lèi)型 OID 以及可能的類(lèi)型修飾詞返回其 SQL 名稱(chēng)。
如果不知道具體的修飾詞,那么在類(lèi)型修飾詞的位置傳入 NULL。
pg_get_keywords
返回一組記錄描述服務(wù)器識(shí)別的 SQL 關(guān)鍵字。
word列包含關(guān)鍵字。catcode列 包含一個(gè)分類(lèi)代碼:
U通用的,C列名,T類(lèi)型或函數(shù)名,或R保留。
catdesc列包含了一個(gè)可能本地化描述分類(lèi)的字符串。
pg_get_constraintdef
,pg_get_indexdef
,pg_get_ruledef
,
和pg_get_triggerdef
分別從一個(gè)視圖、規(guī)則、索引、觸發(fā)器、約束上重新構(gòu)造創(chuàng)建它們的命令(反編譯的
重新構(gòu)造,而不是該命令的原文)。pg_get_expr
反編譯一個(gè)獨(dú)立表達(dá)式的內(nèi)部形式,
比如一個(gè)字段的缺省值。在檢查系統(tǒng)表的內(nèi)容的時(shí)候很有用。pg_get_viewdef
重新構(gòu)
造出定義視圖的SELECT查詢(xún)。這些函數(shù)大多數(shù)都有兩個(gè)變種,其中一個(gè)是"適合打印"
的結(jié)果。這種格式更容易讀,但是缺省的格式更有可能被將來(lái)的PostgreSQL版本用
同樣的方法解釋?zhuān)蝗绻怯糜谵D(zhuǎn)儲(chǔ),那么盡可能避免使用"適合打印"的格式。
給 pretty-print參數(shù)傳遞false生成的結(jié)果和那個(gè)沒(méi)有這個(gè)參數(shù)的變種生成的結(jié)果是完全一樣。
pg_get_functiondef
returns a complete
CREATE OR REPLACE FUNCTIONstatement for a function.
pg_get_function_arguments
returns the argument list
of a function, in the form it would need to appear in within
CREATE FUNCTION.
pg_get_function_result
similarly returns the
appropriateRETURNSclause for the function.
pg_get_function_identity_arguments
returns the
argument list necessary to identify a function, in the form it
would need to appear in withinALTER FUNCTION, for
instance. This form omits default values.
pg_get_serial_sequence
返回與一個(gè)字段相關(guān)的序列名;如果沒(méi)有
任何序列與給定的字段相關(guān)則返回 NULL 。第一個(gè)輸入?yún)?shù)是可選模式的表名,第二個(gè)參數(shù)是列名。
因?yàn)榈谝粋€(gè)參數(shù)可能是一個(gè)模式和表,它不是視為一個(gè)雙引號(hào)的標(biāo)識(shí)符,意味著默認(rèn)情況下小寫(xiě),
而第二個(gè)參數(shù)只是列名稱(chēng),被視為為雙引號(hào),并保留其大小寫(xiě)。
該函數(shù)返回適當(dāng)格式化的值傳遞給序列函數(shù)(參閱Section 9.15)。
這種相關(guān)性可以通過(guò)ALTER SEQUENCE OWNED BY修改或刪除。
(其實(shí)調(diào)用這個(gè)函數(shù)pg_get_owned_sequence
或許更為妥當(dāng),
因?yàn)樗漠?dāng)前名字反映了通常用serial或bigserial的列。)
pg_get_userbyid
extracts a role's name given
its OID.
pg_get_userbyid
通過(guò)角色OID獲取對(duì)應(yīng)的角色名。
pg_tablespace_databases
允許檢查一個(gè)表空間的狀況,它返回在該表空間中保存了對(duì)象的數(shù)據(jù)庫(kù) OID 集合。
如果這個(gè)函數(shù)返回?cái)?shù)據(jù)行,那么該表空間就是非空的,因此不能刪除。要顯示該表空間中的特定對(duì)象,你需要把pg_tablespace_databases
返回的數(shù)據(jù)庫(kù)標(biāo)識(shí)
與pg_class表連接進(jìn)行查詢(xún)。
pg_typeof
returns the OID of the data type of the
value that is passed to it. This can be helpful for troubleshooting or
dynamically constructing SQL queries. The function is declared as
returningregtype, which is an OID alias type (see
Section 8.16); this means that it is the same as an
OID for comparison purposes but displays as a type name. For example:
SELECT pg_typeof(33); pg_typeof ----------- integer (1 row) SELECT typlen FROM pg_type WHERE oid = pg_typeof(33); typlen -------- 4 (1 row)
Table 9-51顯示的函數(shù)將原來(lái)用 COMMENT命令存儲(chǔ)的注釋抽取出來(lái)。如果沒(méi)有找到,則返回 NULL
Table 9-51. 注釋信息函數(shù)
名稱(chēng) | 返回類(lèi)型 | 描述 |
---|---|---|
col_description(table_oid,column_number) |
text | 獲取一個(gè)表字段注釋 |
obj_description(object_oid,catalog_name) |
text | 獲取一個(gè)數(shù)據(jù)庫(kù)對(duì)象的注釋 |
obj_description(object_oid) |
text | 獲取一個(gè)數(shù)據(jù)庫(kù)對(duì)象的注釋?zhuān)?span id="377j5v51b" class="emphasis">deprecated) |
shobj_description(object_oid,catalog_name) |
text | 獲取一個(gè)共享數(shù)據(jù)庫(kù)對(duì)象的注釋 |
col_description
返回一個(gè)表中字段的注釋?zhuān)峭ㄟ^(guò)表 OID 和字段號(hào)來(lái)聲明的。
obj_description
不能用于表字段,因?yàn)樽侄螞](méi)有自己的 OID 。
帶有兩個(gè)參數(shù)的obj_description
返回一個(gè)數(shù)據(jù)庫(kù)對(duì)象的注釋?zhuān)搶?duì)象是通過(guò)其 OID
和其所屬的系統(tǒng)表名字聲明的。比如,obj_description(123456,'pg_class')
將返回 OID 為 12345 的表的注釋。只帶一個(gè)參數(shù)的obj_description
只要求對(duì)象 OID ,現(xiàn)在已經(jīng)廢棄了,
因?yàn)槲覀儾辉俦WC OID 在不同的系統(tǒng)表之間是唯一的,因此可能會(huì)返回錯(cuò)誤的注釋
shobj_description
和obj_description
差不多,不同之處僅在于前者用于共享對(duì)象。
一些系統(tǒng)表是通用于集群中所有數(shù)據(jù)庫(kù)的全局表,因此這些表的描述也是全局存儲(chǔ)的
The functions shown inTable 9-52 provide server transaction information in an exportable form. The main use of these functions is to determine which transactions were committed between two snapshots.
Table 9-52. 事務(wù)ID和快照
名稱(chēng) | 返回類(lèi)型 | 描述 |
---|---|---|
txid_current() |
bigint | 獲取當(dāng)前事務(wù) ID |
txid_current_snapshot() |
txid_snapshot | 獲取當(dāng)前快照 |
txid_snapshot_xmin(txid_snapshot) |
bigint | 獲取快照的xmin |
txid_snapshot_xmax(txid_snapshot) |
bigint | 獲取快照的xmax |
txid_snapshot_xip(txid_snapshot) |
setof bigint | 獲取在快照的進(jìn)行中的事務(wù)IDs |
txid_visible_in_snapshot(bigint,txid_snapshot) |
boolean | 在快照事務(wù)ID是否可見(jiàn)?(不使用子事務(wù)ID) |
內(nèi)部事務(wù) ID 類(lèi)型(xid)是32位,每40億事務(wù)循環(huán)。 盡管這些函數(shù)導(dǎo)出一個(gè)64位格式,一個(gè)"epoch"計(jì)數(shù)器擴(kuò)展,所以在安裝過(guò)程中不會(huì)循環(huán)。 這些函數(shù)使用的數(shù)據(jù)類(lèi)型txid_snapshot,存儲(chǔ)在某時(shí)刻可見(jiàn)的關(guān)于事物ID的信息。其組件描述在Table 9-53。
Table 9-53. 快照構(gòu)成
名稱(chēng) | 描述 |
---|---|
xmin | 最早的事務(wù)ID(txid)仍然活動(dòng)。所有較早事務(wù)將是可見(jiàn)提交了,或者要么死掉回滾了。 |
xmax | 首先作為尚未分配的txid。所有大于或等于此的txids作為這時(shí)的快照都是尚未開(kāi)始的,因此不可見(jiàn)。 |
xip_list | 在快照的時(shí)間的活動(dòng)txids。這個(gè)列表只包含在xmin 和xmax之間的活動(dòng)txids;有可能活動(dòng)的txids高于xmax。 一個(gè)xmin <= txid <xmax的txid,不在這個(gè)列表中,在快照的這個(gè)時(shí)間已經(jīng)是完成的, 因此要么可見(jiàn)或死掉對(duì)應(yīng)它的提交狀態(tài)。這個(gè)列表不包含子事務(wù)的txids。 |
txid_snapshot的文本表示為:xmin:xmax:xip_list。 例如10:20:10,14,15意思為:xmin=10, xmax=20, xip_list=10, 14, 15。