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。 如果省略,缺省是 IN。请主意 ALTER FUNCTION 实际不会注意任何 OUT 参数,因为判断函数的身份只需要输入参数。 因此列出 IN 和 INOUT 参数就足够了。
参数的名字。请注意 ALTER FUNCTION 实际上不会注意参数名, 因为只有参数的数据类型需要用于判断函数的身份。
如果有的话,是该函数参数的数据类型(可以用模式修饰)。
函数的新名字。
函数的新所有者。 请注意如果函数标记为 SECURITY DEFINER,那么它随后将以新的所有者执行。
函数的新模式。
CALLED ON NULL INPUT 把函数改成在所有参数都是空的时候也会调用它。 RETURNS NULL ON NULL INPUT 或者 STRICT 把函数改成如果任何一个参数是空,就根本不执行,而是自动假设返回值为空。 参阅 CREATE FUNCTION 获取更多信息。
把函数的易失属性修改为指定类型。 参阅 CREATE FUNCTION 细节。
修改函数的安全性定义,标识它是否安全定义的。 出于兼容 SQL 标准,关键字 EXTERNAL 被忽略。 参阅 CREATE FUNCTION 获取更多有关这个功能的信息。
因兼容 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;