ALTER FUNCTION
功能描述
修改自定义函数的属性。
注意事项
只有该函数的所有者,才有权限执行该命令,系统管理员默认拥有该权限。要修改函数的所有者的用户必须是新拥有角色的直接或间接成员。如果函数中涉及对临时表相关的操作,则无法使用ALTER FUNCTION。
语法格式
- 修改自定义函数的附加参数:
1 2
ALTER FUNCTION function_name ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) action [ ... ] [ RESTRICT ];
其中附加参数action子句语法为:
1 2 3 4 5 6 7 8 9 10 11 12
{CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT} | {IMMUTABLE | STABLE | VOLATILE} | {SHIPPABLE | NOT SHIPPABLE} | {NOT FENCED | FENCED} | {MASKED | NOT MASKED} | [ NOT ] LEAKPROOF | { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER } | AUTHID { DEFINER | CURRENT_USER } | COST execution_cost | ROWS result_rows | SET configuration_parameter { { TO | = } { value | DEFAULT }| FROM CURRENT} | RESET {configuration_parameter | ALL}
- 修改自定义函数的名字,支持新函数名前带有原函数所在的schema名,不支持同时修改schema名:
1 2 3 4
ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) RENAME TO new_name; ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) RENAME TO schema.new_name;
- 修改自定义函数的所属者:
1 2
ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) OWNER TO new_owner;
- 修改自定义函数的模式:
1 2
ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) SET SCHEMA new_schema;
参数说明
- function_name
要修改的函数名称。
取值范围:已存在的函数名。
- argmode
标识该参数是输入、输出参数。
取值范围:IN/OUT/IN OUT
- argname
参数名称。
取值范围:字符串,符合标识符命名规范。
- argtype
参数类型。
取值范围:有效的类型,请参考数据类型。
- CALLED ON NULL INPUT
表明该函数的某些参数是NULL的时候可以按照正常的方式调用。缺省时与指定此参数的作用相同。
- RETURNS NULL ON NULL INPUT
STRICT
STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了该参数,则如果存在NULL参数时不会执行该函数;即自动假设一个NULL结果。
RETURNS NULL ON NULL INPUT和STRICT的功能相同。
- IMMUTABLE
表示该函数在给出同样的参数值时总是返回同样的结果。
- STABLE
表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。
- VOLATILE
表示该函数值可以在一次表扫描内改变,不会做任何优化。
- SHIPPABLE
NOT SHIPPABLE
表示该函数是否可以下推到DN上执行。
- 对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。
- 对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。
- MASKED | NOT MASKED
表示该函数在guc参数enable_redactcol_computable开启的情况下,是否进行脱敏。MASKED支持修改系统函数,无法和其他ALTER FUNCTION中的action一起使用。
- LEAKPROOF
表示该函数没有副作用,指出参数只包括返回值。LEAKPROOF只能由系统管理员设置。
- (可选)EXTERNAL
目的是和SQL兼容,这个特性适合于所有函数,而不仅是外部函数
- SECURITY INVOKER
AUTHID CURREN_USER
表明该函数将以调用它的用户的权限执行。缺省时与指定此参数的作用相同。
SECURITY INVOKER和AUTHID CURREN_USER的功能相同。
- SECURITY DEFINER
AUTHID DEFINER
声明该函数将以创建它的用户的权限执行。
AUTHID DEFINER和SECURITY DEFINER的功能相同。
- COST execution_cost
用来估计函数的执行成本。
execution_cost以cpu_operator_cost为单位。
取值范围:正数
- ROWS result_rows
估计函数返回的行数。用于函数返回的是一个集合。
取值范围:正数,默认值是1000行。
- configuration_parameter
- value
把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。
取值范围:字符串
- DEFAULT
- OFF
- RESET
指定默认值。
- from current
取当前会话中的值设置为configuration_parameter的值。
- value
- new_name
函数的新名称。要修改函数的所属模式,必须拥有新模式的CREATE权限。
取值范围:字符串,符合标识符命名规范。
- new_owner
函数的新所有者。要修改函数的所有者,新所有者必须拥有该函数所属模式的CREATE权限。
取值范围:已存在的用户角色。
- new_schema
函数的新模式。
取值范围:已存在的模式。
示例
修改函数add的执行规则为IMMUTABLE,即参数不变时返回相同结果:
1
|
ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) IMMUTABLE; |
将函数add的名称修改为add_two_number:
1
|
ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) RENAME TO add_two_number; |
将tpcds中的函数add的名称修改成add_two_number,新函数名前add_two_number带有原函数所在的schema名:
1
|
ALTER FUNCTION tpcds.func_add_sql2(INTEGER, INTEGER) RENAME TO tpcds.add_two_number; |
将函数add的属者改为dbadmin:
1
|
ALTER FUNCTION add_two_number(INTEGER, INTEGER) OWNER TO dbadmin; |