温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PostgreSQL创建函数中的选项是什么

发布时间:2021-11-05 15:04:24 来源:亿速云 阅读:245 作者:iii 栏目:关系型数据库

这篇文章主要介绍“PostgreSQL创建函数中的选项是什么”,在日常操作中,相信很多人在PostgreSQL创建函数中的选项是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PostgreSQL创建函数中的选项是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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: https://www.postgresql.org/docs/12/sql-createfunction.html
[local:/data/run/pg12]:5120 pg12@testdb=#

LANGUAGE
包括sql,c,internal,plpgsql等等

TRANSFORM
该选项列出调用函数时应使用的transform.
transform说明了如何转换数据类型到一种编程语言.比如使用hstore类型通过PL/Python语言来编写函数,
PL/Python无法在Python语言环境中标识hstore类型的数据.语言默认使用文本,但如果出现数组或者链表,
这种默认处理就不合适了.
transform指定了两种函数:
“from SQL”:从SQL环境到编程语言.该函数在使用该语言编写的函数时对参数进行处理.
“to SQL”:从编程语言到SQL环境.处理返回值时调用.
该选项用于PL/Java等编程语言中.

WINDOW
使用该选项,标明该函数是窗口函数(window function)而不是普通函数.

IMMUTABLE | STABLE | VOLATILE
这三个会影响查询优化器.默认选项是VOLATILE.
IMMUTABLE:表示函数不能更改数据库并且给定什么参数就返回什么值,100%的确定性.
STABLE:表示函数不能更改数据库,在一次表扫描过程中,对于同样的参数会返回相同的结果,但结果可以在SQL语句之间改变.
结果如果依赖于数据库查找,参数变量可变时可使用该选项.
VOLATILE:在一次表扫描时,结果也可以改变.如random(),currval()函数等.

LEAKPROOF
该选项表示函数不存在副作用.除了返回值,不会reveals参数的相关信息,比如如果因为某些参数值抛出错误信息,
或者在错误信息中包含参数值,那么该函数被不是leafproof.
该选项会影响以security_barrier选项创建的view或者启用row level security的数据表.
系统将在用户提供的包含non-leakproof函数的条件之前执行来自安全策略的条件和来自查询本身的安全屏障视图,以防止数据的意外泄漏.
标记为leakproof的函数和操作符被认为是可信的,可以在安全策略和安全屏障视图的条件之前执行。

CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT
默认选项为CALLED ON NULL INPUT,表示如某些参数为null函数可以正常调用.函数的编写者有责任检查null值.
RETURNS NULL ON NULL INPUT | STRICT表示如果出现参数为null,则返回null.

SECURITY INVOKER | SECURITY DEFINER
SECURITY INVOKER表示以调用者的权限执行函数,这是默认选项.SECURITY DEFINER则表示以owner的权限执行函数.

PARALLEL UNSAFE | RESTRICTED | SAFE
PARALLEL UNSAFE表示不能以并行模式执行函数,如在SQL中出现该函数则需串行执行,这是默认选项.
PARALLEL RESTRICTED表示函数可以并行模式执行,但执行者限制为并行组的leader.
PARALLEL SAFE表示无约束的并行执行.
如函数修改了数据库状态或者使用子事务修改了事务状态或者尝试访问序列或者改变设置(如setval),那么函数应标记为unsafe.
如函数访问临时表,客户端连接状态,游标,预准备语句或者系统无法以并行模式同步的后端本地状态,那么应标记为restricted.
如函数实际上unsafe但标记为safe,那么会产生不可预知的错位.

COST
函数执行的估算成本,单位为cpu_operator_cost.

ROWS
函数返回的估算行数.

SUPPORT
该函数使用的planner support function.

SET
进入该函数时,设置配置参数为指定的值,执行完毕则恢复为原来的参数值.

AS
函数定义.

到此,关于“PostgreSQL创建函数中的选项是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI