Перейти к основному содержимому

DROP PROCEDURE

примечание

Эта страница переведена при помощи нейросети GigaChat.

DROP PROCEDURE — удаление процедуры.

Синтаксис

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

Описание

DROP PROCEDURE удаляет определение одной или нескольких существующих процедур. Чтобы выполнить эту команду, пользователь должен быть владельцем процедур(ы). Поскольку в базе данных могут существовать процедуры с одинаковым именем, но разными списками аргументов, при удалении обычно необходимо указывать типы аргументов.

Параметры

IF EXISTS
Подавляет ошибку, если указанная процедура не существует, вместо этого выводится уведомление.
name
Указывает имя процедуры, при необходимости дополненное схемой, которая должна быть удалена.
argmode
Задает режим аргумента процедуры: IN, OUT, INOUT или VARIADIC. По умолчанию используется IN, но учтите замечания, описанные ниже.
argname
Задает имя аргумента процедуры. Это имя не влияет на поведение DROP PROCEDURE, так как для определения идентичности процедуры требуются только типы данных аргументов.
argtype
Задает тип(ы) данных аргументов процедуры, при необходимости дополненное схемой, если есть. Ниже описана дополнительная информация.
CASCADE
Автоматически удаляет объекты, которые зависят от процедуры, а также все объекты, зависящие от этих объектов.
RESTRICT
Запрещает удаление процедуры, если какие-либо объекты зависят от нее. Это значение по умолчанию.

Примечания

Если в системе существует только одна процедура с заданным именем, список аргументов можно не указывать, при этом также опустите круглые скобки.

В PostgreSQL достаточно указать только входные аргументы (включая INOUT), поскольку не допускается наличие двух процедур с одинаковым списком входных аргументов. Кроме того, команда DROP не будет проверять корректность типов OUT аргументов — такие аргументы в списке считаются шумом, но их рекомендуется включать для согласованности с определением в CREATE PROCEDURE.

В целях совместимости со стандартом SQL также разрешено указывать все типы аргументов (включая OUT) без указания режимов argmode (IN, OUT, INOUT). В этом случае типы OUT аргументов будут сверяться с указанными при создании. Такой подход может привести к неоднозначности, если режимы аргументов не указаны, система не сможет однозначно определить, по какому правилу производить поиск. В подобных ситуациях DROP PROCEDURE попытается выполнить поиск обоими способами и выдаст ошибку, если будут найдены две разные процедуры.

Чтобы избежать неоднозначности, рекомендуется всегда явно указывать режим IN, даже если он установлен по умолчанию, — это гарантирует использование классической интерпретации PostgreSQL.

Описанные правила поиска процедур применяются не только к DROP PROCEDURE, но и к другим командам, работающим с существующими процедурами, такими как ALTER PROCEDURE, COMMENT ON PROCEDURE.

Примеры

Если в базе данных определена единственная процедура с именем do_db_maintenance, то достаточно следующей команды:

DROP PROCEDURE do_db_maintenance;

Для процедуры, определенной следующим образом:

CREATE PROCEDURE do_db_maintenance(IN target_schema text, OUT results text) ...

подойдут любые из следующих команд:

DROP PROCEDURE do_db_maintenance(IN target_schema text, OUT results text);
DROP PROCEDURE do_db_maintenance(IN text, OUT text);
DROP PROCEDURE do_db_maintenance(IN text);
DROP PROCEDURE do_db_maintenance(text);
DROP PROCEDURE do_db_maintenance(text, text); -- potentially ambiguous

Однако последняя команда будет неоднозначной, если существует, например, такая процедура:

CREATE PROCEDURE do_db_maintenance(IN target_schema text, IN options text) ...

Совместимость

Команда DROP PROCEDURE соответствует стандарту SQL, однако PostgreSQL предоставляет расширения:

  • Стандарт разрешает удалять только одну процедуру за раз.
  • Параметр IF EXISTS является расширением.
  • Возможность указать режимы и имена аргументов является расширением, а правила поиска различаются при задании режимов.

Смотрите также

CREATE PROCEDURE, ALTER PROCEDURE, DROP FUNCTION, DROP ROUTINE