函數(shù) | 返回類型 | 描述 |
nextval(regclass) | bigint | 遞增序列對象到它的下一個數(shù)值并且返回該值。這個動作是自動完成的。即使多個會話并發(fā)運行nextval,每個進(jìn)程也會安全地收到一個唯一的序列值。 |
currval(regclass) | bigint | 在當(dāng)前會話中返回最近一次nextval抓到的該序列的數(shù)值。(如果在本會話中從未在該序列上調(diào)用過 nextval,那么會報告一個錯誤。)請注意因為此函數(shù)返回一個會話范圍的數(shù)值,而且也能給出一個可預(yù)計的結(jié)果,因此可以用于判斷其它會話是否執(zhí)行過nextval。 |
lastval() | bigint | 返回當(dāng)前會話里最近一次nextval返回的數(shù)值。這個函數(shù)等效于currval,只是它不用序列名為參數(shù),它抓取當(dāng)前會話里面最近一次nextval使用的序列。如果當(dāng)前會話還沒有調(diào)用過nextval,那么調(diào)用lastval將會報錯。 |
setval(regclass, bigint) | bigint | 重置序列對象的計數(shù)器數(shù)值。設(shè)置序列的last_value字段為指定數(shù)值并且將其is_called字段設(shè)置為true,表示下一次nextval將在返回數(shù)值之前遞增該序列。 |
setval(regclass, bigint, boolean) | bigint | 重置序列對象的計數(shù)器數(shù)值。功能等同于上面的setval函數(shù),只是is_called可以設(shè)置為true或false。如果將其設(shè)置為false,那么下一次nextval將返回該數(shù)值,隨后的nextval才開始遞增該序列。 |
對于regclass參數(shù),僅需用單引號括住序列名即可,因此它看上去就像文本常量。為了達(dá)到和處理普通SQL對象一樣的兼容性,這個字串將被轉(zhuǎn)換成小寫,除非該序列名是用雙引號括起,如:
1. CASE:
SQL CASE表達(dá)式是一種通用的條件表達(dá)式,類似于其它語言中的if/else語句。
COALESCE返回它的第一個非NULL的參數(shù)的值。它常用于在為顯示目的檢索數(shù)據(jù)時用缺省值替換NULL值。
十一、數(shù)組函數(shù)和操作符:
1. PostgreSQL中提供的用于數(shù)組的操作符列表:
操作符 | 描述 | 例子 | 結(jié)果 |
= | 等于 | ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3] | t |
> | 不等于 | ARRAY[1,2,3] > ARRAY[1,2,4] | t |
小于 | ARRAY[1,2,3] ARRAY[1,2,4] | t | |
> | 大于 | ARRAY[1,4,3] > ARRAY[1,2,4] | t |
= | 小于或等于 | ARRAY[1,2,3] = ARRAY[1,2,3] | t |
>= | 大于或等于 | ARRAY[1,4,3] >= ARRAY[1,4,3] | t |
|| | 數(shù)組與數(shù)組連接 | ARRAY[1,2,3] || ARRAY[4,5,6] | {1,2,3,4,5,6} |
|| | 數(shù)組與數(shù)組連接 | ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]] | {{1,2,3},{4,5,6},{7,8,9}} |
|| | 元素與數(shù)組連接 | 3 || ARRAY[4,5,6] | {3,4,5,6} |
|| | 元素與數(shù)組連接 | ARRAY[4,5,6] || 7 | {4,5,6,7} |
2. PostgreSQL中提供的用于數(shù)組的函數(shù)列表:
函數(shù) | 返回類型 | 描述 | 例子 | 結(jié)果 |
array_cat(anyarray, anyarray) | anyarray | 連接兩個數(shù)組 | array_cat(ARRAY[1,2,3], ARRAY[4,5]) | {1,2,3,4,5} |
array_append(anyarray, anyelement) | anyarray | 向一個數(shù)組末尾附加一個元素 | array_append(ARRAY[1,2], 3) | {1,2,3} |
array_prepend(anyelement, anyarray) | anyarray | 向一個數(shù)組開頭附加一個元素 | array_prepend(1, ARRAY[2,3]) | {1,2,3} |
array_dims(anyarray) | text | 返回一個數(shù)組維數(shù)的文本表示 | array_dims(ARRAY[[1,2,3], [4,5,6]]) | [1:2][1:3] |
array_lower(anyarray, int) | int | 返回指定的數(shù)組維數(shù)的下界 | array_lower(array_prepend(0, ARRAY[1,2,3]), 1) | 0 |
array_upper(anyarray, int) | int | 返回指定數(shù)組維數(shù)的上界 | array_upper(ARRAY[1,2,3,4], 1) | 4 |
array_to_string(anyarray, text) | text | 使用提供的分隔符連接數(shù)組元素 | array_to_string(ARRAY[1, 2, 3], '~^~') | 1~^~2~^~3 |
string_to_array(text, text) | text[] | 使用指定的分隔符把字串拆分成數(shù)組元素 | string_to_array('xx~^~yy~^~zz', '~^~') | {xx,yy,zz} |
十二、系統(tǒng)信息函數(shù):
1. PostgreSQL中提供的和數(shù)據(jù)庫相關(guān)的函數(shù)列表:
名字 | 返回類型 | 描述 |
current_database() | name | 當(dāng)前數(shù)據(jù)庫的名字 |
current_schema() | name | 當(dāng)前模式的名字 |
current_schemas(boolean) | name[] | 在搜索路徑中的模式名字 |
current_user | name | 目前執(zhí)行環(huán)境下的用戶名 |
inet_client_addr() | inet | 連接的遠(yuǎn)端地址 |
inet_client_port() | int | 連接的遠(yuǎn)端端口 |
inet_server_addr() | inet | 連接的本地地址 |
inet_server_port() | int | 連接的本地端口 |
session_user | name | 會話用戶名 |
pg_postmaster_start_time() | timestamp | postmaster啟動的時間 |
user | name | current_user |
version() | text | PostgreSQL版本信息 |
名字 | 描述 | 可用權(quán)限 |
has_table_privilege(user,table,privilege) | 用戶是否有訪問表的權(quán)限 | SELECT/INSERT/UPDATE/DELETE/RULE/REFERENCES/TRIGGER |
has_table_privilege(table,privilege) | 當(dāng)前用戶是否有訪問表的權(quán)限 | SELECT/INSERT/UPDATE/DELETE/RULE/REFERENCES/TRIGGER |
has_database_privilege(user,database,privilege) | 用戶是否有訪問數(shù)據(jù)庫的權(quán)限 | CREATE/TEMPORARY |
has_database_privilege(database,privilege) | 當(dāng)前用戶是否有訪問數(shù)據(jù)庫的權(quán)限 | CREATE/TEMPORARY |
has_function_privilege(user,function,privilege) | 用戶是否有訪問函數(shù)的權(quán)限 | EXECUTE |
has_function_privilege(function,privilege) | 當(dāng)前用戶是否有訪問函數(shù)的權(quán)限 | EXECUTE |
has_language_privilege(user,language,privilege) | 用戶是否有訪問語言的權(quán)限 | USAGE |
has_language_privilege(language,privilege) | 當(dāng)前用戶是否有訪問語言的權(quán)限 | USAGE |
has_schema_privilege(user,schema,privilege) | 用戶是否有訪問模式的權(quán)限 | CREAT/USAGE |
has_schema_privilege(schema,privilege) | 當(dāng)前用戶是否有訪問模式的權(quán)限 | CREAT/USAGE |
has_tablespace_privilege(user,tablespace,privilege) | 用戶是否有訪問表空間的權(quán)限 | CREATE |
has_tablespace_privilege(tablespace,privilege) | 當(dāng)前用戶是否有訪問表空間的權(quán)限 | CREATE |
注:以上函數(shù)均返回boolean類型。要評估一個用戶是否在權(quán)限上持有賦權(quán)選項,給權(quán)限鍵字附加 WITH GRANT OPTION;比如 'UPDATE WITH GRANT OPTION'。
3. 模式可視性查詢函數(shù):
那些判斷一個對象是否在當(dāng)前模式搜索路徑中可見的函數(shù)。 如果一個表所在的模式在搜索路徑中,并且沒有同名的表出現(xiàn)在搜索路徑的更早的地方,那么就說這個表視可見的。 它等效于表可以不帶明確模式修飾進(jìn)行引用。
名字 | 描述 | 應(yīng)用類型 |
pg_table_is_visible(table_oid) | 該表/視圖是否在搜索路徑中可見 | regclass |
pg_type_is_visible(type_oid) | 該類/視圖型是否在搜索路徑中可見 | regtype |
pg_function_is_visible(function_oid) | 該函數(shù)是否在搜索路徑中可見 | regprocedure |
pg_operator_is_visible(operator_oid) | 該操作符是否在搜索路徑中可見 | regoperator |
pg_opclass_is_visible(opclass_oid) | 該操作符表是否在搜索路徑中可見 | regclass |
pg_conversion_is_visible(conversion_oid) | 轉(zhuǎn)換是否在搜索路徑中可見 | regoperator |
注:以上函數(shù)均返回boolean類型,所有這些函數(shù)都需要對象 OID 標(biāo)識作為檢查的對象。
名字 | 返回類型 | 描述 |
format_type(type_oid,typemod) | text | 獲取一個數(shù)據(jù)類型的SQL名稱 |
pg_get_viewdef(view_oid) | text | 為視圖獲取CREATE VIEW命令 |
pg_get_viewdef(view_oid,pretty_bool) | text | 為視圖獲取CREATE VIEW命令 |
pg_get_ruledef(rule_oid) | text | 為規(guī)則獲取CREATE RULE命令 |
pg_get_ruledef(rule_oid,pretty_bool) | text | 為規(guī)則獲取CREATE RULE命令 |
pg_get_indexdef(index_oid) | text | 為索引獲取CREATE INDEX命令 |
pg_get_indexdef(index_oid,column_no,pretty_bool) | text | 為索引獲取CREATE INDEX命令, 如果column_no不為零,則是只獲取一個索引字段的定義 |
pg_get_triggerdef(trigger_oid) | text | 為觸發(fā)器獲取CREATE [CONSTRAINT] TRIGGER |
pg_get_constraintdef(constraint_oid) | text | 獲取一個約束的定義 |
pg_get_constraintdef(constraint_oid,pretty_bool) | text | 獲取一個約束的定義 |
pg_get_expr(expr_text,relation_oid) | text | 反編譯一個表達(dá)式的內(nèi)部形式,假設(shè)其中的任何Vars都引用第二個參數(shù)指出的關(guān)系 |
pg_get_expr(expr_text,relation_oid, pretty_bool) | text | 反編譯一個表達(dá)式的內(nèi)部形式,假設(shè)其中的任何Vars都引用第二個參數(shù)指出的關(guān)系 |
pg_get_userbyid(roleid) | name | 獲取給出的ID的角色名 |
pg_get_serial_sequence(table_name,column_name) | text | 獲取一個serial或者bigserial字段使用的序列名字 |
pg_tablespace_databases(tablespace_oid) | setof oid | 獲取在指定表空間(OID表示)中擁有對象的一套數(shù)據(jù)庫的OID的集合 |
這些函數(shù)大多數(shù)都有兩個變種,其中一個可以選擇對結(jié)果的"漂亮的打印"。 漂亮打印的格式更容易讀,但是缺省的格式更有可能被將來的PostgreSQL版本用同樣的方法解釋;如果是用于轉(zhuǎn)儲,那么盡可能避免使用漂亮打印。 給漂亮打印參數(shù)傳遞false生成的結(jié)果和那個沒有這個參數(shù)的變種生成的結(jié)果完全一樣。
十三、系統(tǒng)管理函數(shù):
1. 查詢以及修改運行時配置參數(shù)的函數(shù):
名字 | 返回類型 | 描述 |
current_setting(setting_name) | text | 當(dāng)前設(shè)置的值 |
set_config(setting_name,new_value,is_local) | text | 設(shè)置參數(shù)并返回新值 |
current_setting用于以查詢形式獲取setting_name設(shè)置的當(dāng)前數(shù)值。它和SQL命令SHOW是等效的。 比如:
名字 | 返回類型 | 描述 |
pg_tablespace_size(oid) | bigint | 指定OID代表的表空間使用的磁盤空間 |
pg_tablespace_size(name) | bigint | 指定名字的表空間使用的磁盤空間 |
pg_database_size(oid) | bigint | 指定OID代表的數(shù)據(jù)庫使用的磁盤空間 |
pg_database_size(name) | bigint | 指定名稱的數(shù)據(jù)庫使用的磁盤空間 |
pg_relation_size(oid) | bigint | 指定OID代表的表或者索引所使用的磁盤空間 |
pg_relation_size(text) | bigint | 指定名稱的表或者索引使用的磁盤空間。這個名字可以用模式名修飾 |
pg_total_relation_size(oid) | bigint | 指定OID代表的表使用的磁盤空間,包括索引和壓縮數(shù)據(jù) |
pg_total_relation_size(text) | bigint | 指定名字的表所使用的全部磁盤空間,包括索引和壓縮數(shù)據(jù)。表名字可以用模式名修飾。 |
pg_size_pretty(bigint) | text | 把字節(jié)計算的尺寸轉(zhuǎn)換成一個人類易讀的尺寸單位 |
3. 數(shù)據(jù)庫對象位置函數(shù):
名字 | 返回類型 | 描述 |
pg_relation_filenode(relationregclass) | oid | 獲取指定對象的文件節(jié)點編號(通常為對象的oid值)。 |
pg_relation_filepath(relationregclass) | text | 獲取指定對象的完整路徑名。 |
標(biāo)簽:株洲 錦州 晉城 珠海 烏海 來賓 衡陽 蚌埠
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PostgreSQL教程(七):函數(shù)和操作符詳解(3)》,本文關(guān)鍵詞 PostgreSQL,教程,七,函數(shù),和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。