---
name: "ALTER_ROUTINE"
section: "7"
platform: "linux"
package: "postgresql"
version: "18.6-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/ALTER_ROUTINE"
---

# ALTER\_ROUTINE(7)

change the definition of a routine

## NAME

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 ([**ALTER\_AGGREGATE**(7)](/ALTER_AGGREGATE/7.md)), ALTER FUNCTION ([**ALTER\_FUNCTION**(7)](/ALTER_FUNCTION/7.md)), and ALTER PROCEDURE ([**ALTER\_PROCEDURE**(7)](/ALTER_PROCEDURE/7.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 ([**ALTER\_FUNCTION**(7)](/ALTER_FUNCTION/7.md)) and ALTER PROCEDURE ([**ALTER\_PROCEDURE**(7)](/ALTER_PROCEDURE/7.md)) for more details. Allowing routine names to refer to aggregate functions is a PostgreSQL extension.

## SEE ALSO

ALTER AGGREGATE ([**ALTER\_AGGREGATE**(7)](/ALTER_AGGREGATE/7.md)), ALTER FUNCTION ([**ALTER\_FUNCTION**(7)](/ALTER_FUNCTION/7.md)), ALTER PROCEDURE ([**ALTER\_PROCEDURE**(7)](/ALTER_PROCEDURE/7.md)), DROP ROUTINE ([**DROP\_ROUTINE**(7)](/DROP_ROUTINE/7.md))

Note that there is no CREATE ROUTINE command.
