ALTER FUNCTION
Changes the definition of a function.
Synopsis
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 | [ NOT ] LEAKPROOF}
{[EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY DEFINER}
EXECUTE ON { ANY | MASTER | ALL SEGMENTS | INITPLAN }
COST <execution_cost>
SET <configuration_parameter> { TO | = } { <value> | DEFAULT }
SET <configuration_parameter> FROM CURRENT
RESET <configuration_parameter>
RESET ALL
Description
ALTER FUNCTION changes the definition of a function.
You must own the function to use ALTER FUNCTION.
To change a function’s schema, you must also have the CREATE privilege on the new schema.
To alter the owner, you must also be a direct or indirect member of the new owning role, and that role must have the CREATE privilege on the function’s schema.
These restrictions enforce that altering the owner doesn’t do anything you couldn’t do by dropping and recreating the function.
However, a superuser can alter ownership of any function anyway.
Parameters
| Parameter | Description |
|---|---|
name |
The name (optionally schema-qualified) of an existing function |
argmode |
The mode of an argument: |
argname |
The name of an argument.
Note that |
argtype |
The data types of the function’s arguments (optionally schema-qualified), if any |
new_name |
The new name of the function |
new_owner |
The new owner of the function.
Note that if the function is marked |
new_schema |
The new schema for the function |
CALLED ON NULL INPUT |
Changes the function so that it will be invoked when some or all of its arguments are null |
RETURNS NULL ON NULL INPUT |
|
STRICT |
See |
IMMUTABLE |
Changes the volatility of the function to the specified setting |
STABLE |
Changes the volatility of the function to the specified setting |
VOLATILE |
Changes the volatility of the function to the specified setting |
[ EXTERNAL ] SECURITY INVOKER [ EXTERNAL ] SECURITY DEFINER |
Changes whether the function is a security definer or not.
The keyword |
LEAKPROOF |
Changes whether the function is considered leakproof or not |
COST <execution_cost> |
Changes the estimated execution cost of the function |
configuration_parameter, value |
Adds or changes the assignment to be made to a configuration parameter when the function is called.
If |
RESTRICT |
Ignored for conformance with the SQL standard |
Examples
Rename the function sqrt for type integer to square_root:
ALTER FUNCTION sqrt(integer) RENAME TO square_root;
Change the owner of the function sqrt for type integer to joe:
ALTER FUNCTION sqrt(integer) OWNER TO joe;
Change the schema of the function sqrt for type integer to maths:
ALTER FUNCTION sqrt(integer) SET SCHEMA maths;
Adjust the search path that is automatically set for a function:
ALTER FUNCTION check_password(text) SET search_path = admin, pg_temp;
Disable automatic setting of search_path for a function:
ALTER FUNCTION check_password(text) RESET search_path;
The function will now execute with whatever search path is used by its caller.
Compatibility
This statement is partially compatible with the ALTER FUNCTION statement in the SQL standard.
The standard allows more properties of a function to be modified, but does not provide the ability to rename a function, make a function a security definer, attach configuration parameter values to a function, or change the owner, schema, or volatility of a function.
The standard also requires the RESTRICT keyword, which is optional in PostgreSQL.