---
title: "ALTER ROUTINE"
id: sql-alterroutine
pg_version: "20devel"
---
# ALTER ROUTINE — change the definition of a routine
## Synopsis
```
ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
action [ ... ] [ RESTRICT ]
ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
RENAME TO new_name
ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
SET SCHEMA new_schema
ALTER ROUTINE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ]
[ NO ] DEPENDS ON EXTENSION extension_name
where action is one of:
IMMUTABLE | STABLE | VOLATILE
[ NOT ] LEAKPROOF
[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER
PARALLEL { UNSAFE | RESTRICTED | SAFE }
COST execution_cost
ROWS result_rows
SET configuration_parameter { TO | = } { value | DEFAULT }
SET configuration_parameter FROM CURRENT
RESET configuration_parameter
RESET ALL
```
## Description
`ALTER ROUTINE` changes the definition of a routine, which can be an aggregate function, a normal function, or a procedure. See under [ALTER AGGREGATE](sql-alteraggregate.md), [ALTER FUNCTION](sql-alterfunction.md), and [ALTER PROCEDURE](sql-alterprocedure.md) for the description of the parameters, more examples, and further details.
## Examples
To rename the routine `foo` for type `integer` to `foobar`:
ALTER ROUTINE foo(integer) RENAME TO foobar;
This command will work independent of whether `foo` is an aggregate, function, or procedure.
## Compatibility
This statement is partially compatible with the `ALTER ROUTINE` statement in the SQL standard. See under [ALTER FUNCTION](sql-alterfunction.md) and [ALTER PROCEDURE](sql-alterprocedure.md) for more details. Allowing routine names to refer to aggregate functions is a PostgreSQL extension.
## See Also
[ALTER AGGREGATE](sql-alteraggregate.md), [ALTER FUNCTION](sql-alterfunction.md), [ALTER PROCEDURE](sql-alterprocedure.md), [DROP ROUTINE](sql-droproutine.md)Note that there is no `CREATE ROUTINE` command.