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

# DROP\_ROUTINE(7)

remove a routine

## NAME

DROP\_ROUTINE - remove a routine

## SYNOPSIS

```
DROP ROUTINE [ IF EXISTS ] name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [, ...]
    [ CASCADE | RESTRICT ]
```

## DESCRIPTION

**DROP ROUTINE** removes the definition of one or more existing routines. The term “routine” includes aggregate functions, normal functions, and procedures. See under DROP AGGREGATE ([**DROP\_AGGREGATE**(7)](/DROP_AGGREGATE/7.md)), DROP FUNCTION ([**DROP\_FUNCTION**(7)](/DROP_FUNCTION/7.md)), and DROP PROCEDURE ([**DROP\_PROCEDURE**(7)](/DROP_PROCEDURE/7.md)) for the description of the parameters, more examples, and further details.

## NOTES

The lookup rules used by **DROP ROUTINE** are fundamentally the same as for **DROP PROCEDURE**; in particular, **DROP ROUTINE** shares that command's behavior of considering an argument list that has no *argmode* markers to be possibly using the SQL standard's definition that OUT arguments are included in the list. (**DROP AGGREGATE** and **DROP FUNCTION** do not do that.)

In some cases where the same name is shared by routines of different kinds, it is possible for **DROP ROUTINE** to fail with an ambiguity error when a more specific command (**DROP FUNCTION**, etc.) would work. Specifying the argument type list more carefully will also resolve such problems.

These lookup rules are also used by other commands that act on existing routines, such as **ALTER ROUTINE** and **COMMENT ON ROUTINE**.

## EXAMPLES

To drop the routine foo for type integer:

```
DROP ROUTINE foo(integer);
```

This command will work independent of whether foo is an aggregate, function, or procedure.

## COMPATIBILITY

This command conforms to the SQL standard, with these PostgreSQL extensions:

• The standard only allows one routine to be dropped per command.

• The IF EXISTS option is an extension.

• The ability to specify argument modes and names is an extension, and the lookup rules differ when modes are given.

• User-definable aggregate functions are an extension.

## SEE ALSO

DROP AGGREGATE ([**DROP\_AGGREGATE**(7)](/DROP_AGGREGATE/7.md)), DROP FUNCTION ([**DROP\_FUNCTION**(7)](/DROP_FUNCTION/7.md)), DROP PROCEDURE ([**DROP\_PROCEDURE**(7)](/DROP_PROCEDURE/7.md)), ALTER ROUTINE ([**ALTER\_ROUTINE**(7)](/ALTER_ROUTINE/7.md))

Note that there is no CREATE ROUTINE command.
