這篇文章主要介紹“PostgreSQL創(chuàng)建函數(shù)中的選項是什么”,在日常操作中,相信很多人在PostgreSQL創(chuàng)建函數(shù)中的選項是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PostgreSQL創(chuàng)建函數(shù)中的選項是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

Create Function的語法如下:
[pg12@localhost ~]$ psql
Expanded display is used automatically.
psql (12.2)
Type "help" for help.
[local:/data/run/pg12]:5120 pg12@testdb=# \help create function
Command: CREATE FUNCTION
Description: define a new function
Syntax:
CREATE [ OR REPLACE ] FUNCTION
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
[ RETURNS rettype
| RETURNS TABLE ( column_name column_type [, ...] ) ]
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF
| CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
| [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SUPPORT support_function
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...
URL: /tupian/20230521/sql-createfunction.html
[local:/data/run/pg12]:5120 pg12@testdb=#LANGUAGE
包括sql,c,internal,plpgsql等等
TRANSFORM
該選項列出調(diào)用函數(shù)時應(yīng)使用的transform.
transform說明了如何轉(zhuǎn)換數(shù)據(jù)類型到一種編程語言.比如使用hstore類型通過PL/Python語言來編寫函數(shù),
PL/Python無法在Python語言環(huán)境中標(biāo)識hstore類型的數(shù)據(jù).語言默認(rèn)使用文本,但如果出現(xiàn)數(shù)組或者鏈表,
這種默認(rèn)處理就不合適了.
transform指定了兩種函數(shù):
“from SQL”:從SQL環(huán)境到編程語言.該函數(shù)在使用該語言編寫的函數(shù)時對參數(shù)進(jìn)行處理.
“to SQL”:從編程語言到SQL環(huán)境.處理返回值時調(diào)用.
該選項用于PL/Java等編程語言中.
WINDOW
使用該選項,標(biāo)明該函數(shù)是窗口函數(shù)(window function)而不是普通函數(shù).
IMMUTABLE | STABLE | VOLATILE
這三個會影響查詢優(yōu)化器.默認(rèn)選項是VOLATILE.
IMMUTABLE:表示函數(shù)不能更改數(shù)據(jù)庫并且給定什么參數(shù)就返回什么值,100%的確定性.
STABLE:表示函數(shù)不能更改數(shù)據(jù)庫,在一次表掃描過程中,對于同樣的參數(shù)會返回相同的結(jié)果,但結(jié)果可以在SQL語句之間改變.
結(jié)果如果依賴于數(shù)據(jù)庫查找,參數(shù)變量可變時可使用該選項.
VOLATILE:在一次表掃描時,結(jié)果也可以改變.如random(),currval()函數(shù)等.
LEAKPROOF
該選項表示函數(shù)不存在副作用.除了返回值,不會reveals參數(shù)的相關(guān)信息,比如如果因為某些參數(shù)值拋出錯誤信息,
或者在錯誤信息中包含參數(shù)值,那么該函數(shù)被不是leafproof.
該選項會影響以security_barrier選項創(chuàng)建的view或者啟用row level security的數(shù)據(jù)表.
系統(tǒng)將在用戶提供的包含non-leakproof函數(shù)的條件之前執(zhí)行來自安全策略的條件和來自查詢本身的安全屏障視圖,以防止數(shù)據(jù)的意外泄漏.
標(biāo)記為leakproof的函數(shù)和操作符被認(rèn)為是可信的,可以在安全策略和安全屏障視圖的條件之前執(zhí)行。
CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
默認(rèn)選項為CALLED ON NULL INPUT,表示如某些參數(shù)為null函數(shù)可以正常調(diào)用.函數(shù)的編寫者有責(zé)任檢查null值.
RETURNS NULL ON NULL INPUT | STRICT表示如果出現(xiàn)參數(shù)為null,則返回null.
SECURITY INVOKER | SECURITY DEFINER
SECURITY INVOKER表示以調(diào)用者的權(quán)限執(zhí)行函數(shù),這是默認(rèn)選項.SECURITY DEFINER則表示以owner的權(quán)限執(zhí)行函數(shù).
PARALLEL UNSAFE | RESTRICTED | SAFE
PARALLEL UNSAFE表示不能以并行模式執(zhí)行函數(shù),如在SQL中出現(xiàn)該函數(shù)則需串行執(zhí)行,這是默認(rèn)選項.
PARALLEL RESTRICTED表示函數(shù)可以并行模式執(zhí)行,但執(zhí)行者限制為并行組的leader.
PARALLEL SAFE表示無約束的并行執(zhí)行.
如函數(shù)修改了數(shù)據(jù)庫狀態(tài)或者使用子事務(wù)修改了事務(wù)狀態(tài)或者嘗試訪問序列或者改變設(shè)置(如setval),那么函數(shù)應(yīng)標(biāo)記為unsafe.
如函數(shù)訪問臨時表,客戶端連接狀態(tài),游標(biāo),預(yù)準(zhǔn)備語句或者系統(tǒng)無法以并行模式同步的后端本地狀態(tài),那么應(yīng)標(biāo)記為restricted.
如函數(shù)實際上unsafe但標(biāo)記為safe,那么會產(chǎn)生不可預(yù)知的錯位.
COST
函數(shù)執(zhí)行的估算成本,單位為cpu_operator_cost.
ROWS
函數(shù)返回的估算行數(shù).
SUPPORT
該函數(shù)使用的planner support function.
SET
進(jìn)入該函數(shù)時,設(shè)置配置參數(shù)為指定的值,執(zhí)行完畢則恢復(fù)為原來的參數(shù)值.
AS
函數(shù)定義.
到此,關(guān)于“PostgreSQL創(chuàng)建函數(shù)中的選項是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
新聞名稱:PostgreSQL創(chuàng)建函數(shù)中的選項是什么-創(chuàng)新互聯(lián)
本文網(wǎng)址:http://www.chinadenli.net/article22/djhpcc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、網(wǎng)站制作、關(guān)鍵詞優(yōu)化、Google、網(wǎng)站導(dǎo)航、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容