ALTER FUNCTION
名字
ALTER FUNCTION -- 修改一个函数的定义
语法概要
ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) action [ ... ] [ RESTRICT ] ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) RENAME TO new_name ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) OWNER TO new_owner ALTER FUNCTION name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) SET SCHEMA new_schema where action is one of: CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT IMMUTABLE | STABLE | VOLATILE [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER COST execution_cost ROWS result_rows SET configuration_parameter { TO | = } { value | DEFAULT } SET configuration_parameter FROM CURRENT RESET configuration_parameter RESET ALL
描述
ALTER FUNCTION 修改一个函数的定义。
要使用 ALTER FUNCTION,你必须具备该函数的所有权。要修改一个函数的模式,你还必须在新模式上拥有 CREATE 权限。要改变外部表的所有者,你必须是新角色的直接或间接成员,并且这个新角色必须在该函数的模式上具有 CREATE 权限。(这强制限制在进行更改所有者的操作时,如果无法通过删除后重建函数的方式完成,那么就不能做任何事。不过,超级用户可以用任何方法任意更改函数的所有者。)
参数
name 一个现有的函数的名字(可以有模式修饰)。
argmode 参数的使用类型:可以是 IN、OUT、INOUT 或者 VARIADIC。 如果省略,缺省是 IN。请主意 ALTER FUNCTION 实际不会注意任何 OUT 参数,因为判断函数的身份只需要输入参数。 因此列出 IN 和 INOUT 参数就足够了。
argname 参数的名字。请注意 ALTER FUNCTION 实际上不会注意参数名, 因为只有参数的数据类型需要用于判断函数的身份。
argtype 如果有的话,是该函数参数的数据类型(可以用模式修饰)。
- name
- 一个现有的函数的名字(可以有模式修饰)。
- argmode
- 函数参数的模式:IN,OUT,INOUT或VARIADIC。如果不指定该参数,默认为IN。注意,ALTER FUNCTION 实际上不会处理OUT模式的参数,因为只有输入参数才会作为函数签名的一部分来标识函数实体。因此,列出IN,INOUT,VARIDIC模式就足够了。
- argname
- 函数参数的名字。注意,ALTER FUNCTION 实际上不会处理参数名字,因为只有参数的数据类型才会作为函数的签名的一部分来标识函数实体。
- argtype
- 函数参数的数据类型,如果有模式的话可以使用模式进行修饰。
- new_name
- 函数的新名字
- new_owner
- 函数的新所有者。请注意如果函数标记为 SECURITY DEFINER,那么它随后将以新的所有者执行。
- new_schema
- 函数的新模式。
- CALLED ON NULL INPUT
- RETURNS NULL ON NULL INPUT
- STRICT
- CALLED ON NULL INPUT 把函数改成在某些或所有参数都是null的时候也可以调用。RETURNS NULL ON NULL INPUT 或者 STRICT 把函数改成如果任何一个参数是空,就越过函数的调用而自动返回默认null。参见 CREATE FUNCTION 获取更多信息。
- IMMUTABLE
- STABLE
- VOLATILE
- 把函数的易失属性修改为设定的类型。 参阅 CREATE FUNCTION 细节。
- [ EXTERNAL ] SECURITY INVOKER
- [ EXTERNAL ] SECURITY DEFINER
- 修改函数的安全性定义,标识它是否安全定义的。 出于兼容 SQL 标准,关键字 EXTERNAL 被忽略。 参阅 CREATE FUNCTION 获取更多有关这个功能的信息。
- COST execution_cost
- 修改函数运行的估计成本。 参阅 CREATE FUNCTION 中的更多信息。
- ROWS result_rows
- 修改返回集合类型的函数返回的估计行数。参阅 CREATE FUNCTION 中的更多信息。
- configuration_parameter
- value
- 添加或修改函数调用时作为配置参数的参数值。 如果值是DEFAULT或者等价的RESET,函数本地设置被删除,因此函数使用环境中的设置值。使用RESET ALL清除所有函数本地设置。SET FROM CURRENT 保存会话中参数的当前值作为函数执行时使用的值。
- 参见 SET 和第18章查看允许的参数名和值。
- RESTRICT
- 因兼容 SQL 标准而忽略。
示例
把名字为 sqrt,参数类型为 integer 的函数重命名为 square_root:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
为用于类型 integer 的函数 sqrt 的所有者修改为 joe:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
把用于类型为 integer 的函数 sqrt 的模式改变为 maths:
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
调整函数自动设置的搜索路径:
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
禁用函数自动设置的查找路径:
ALTER FUNCTION check_password(text) RESET search_path;
现在,函数将采用调用者使用的搜索路径。
兼容性
这个语句部分的和SQL标准中的ALTER FUNCTION 语句兼容。 标准允许修改函数的更多的属性,但是没有提供修改函数名字的功能, 也没有提供把一个函数定义为安全定义器的功能,没有为函数提供配置参数,没有提供修改函数所有者、模式和易失性的功能。 标准还要求 RESTRICT 关键字;这在 PostgreSQL 里是可选的。