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 这里的 action 是如下之一: CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT IMMUTABLE | STABLE | VOLATILE [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
ALTER FUNCTION 修改一个函数的定义。
要使用 ALTER FUNCTION ,你必须拥有该函数。要修改一个函数的模式,你还必须在新模式上拥有 CREATE 权限。要修改所有者,你还必须是新的所有角色的直接或间接成员,并且该成员必须在此函数的模式上有 CREATE 权限。这些限制强制了修改该所有者不会做任何通过删除和重建函数不能做的事情。不过,超级用户可以以任何方式修改任意函数的所有权。
一个现有的函数名字(可以有模式修饰)
参数的模式:可以是 IN(缺省), OUT, INOUT 之一。请主意 ALTER FUNCTION 实际不会注意任何 OUT 参数,因为判断函数的身份只需要输入参数。因此列出 IN 和 INOUT 参数就足够了。
参数的名字。请注意 ALTER FUNCTION 实际上不会注意参数的名字,因为只有参数的数据类型用于判断函数的身份。
如果有的话,是该函数参数的数据类型(可以用模式修饰)。
函数的新名字
函数的新所有者。请注意如果函数标记为 SECURITY DEFINER ,那么它随后将以新的所有者执行。
函数的新模式
CALLED ON NULL INPUT 把函数改成在所有参数都是 NULL 的时候也会调用它。RETURNS NULL ON NULL INPUT 或 STRICT 把函数改成如果任何一个参数是 NULL 就根本不执行并且自动返回 NULL 。参阅 CREATE FUNCTION 获取更多信息。
把函数的易失属性修改为指定类型。参阅 CREATE FUNCTION 获取细节。
修改函数的安全性定义,标识它是否是安全定义器。出于兼容 SQL 标准,关键字 EXTERNAL 将被忽略。参阅 CREATE FUNCTION 获取更多有关这个功能的信息。
因兼容 SQL 标准而忽略
把参数类型为 integer 的函数 sqrt 重命名为 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;