PostgreSQL: как выполнить DROP FUNCTION IF EXISTS без указания параметров?

Я могу успешно создать функцию следующим образом:

CREATE FUNCTION Foo(MY_Value INT) RETURNS INT
AS 'SELECT 2 + MY_Value'
LANGUAGE SQL

Однако, если я сначала хочу проверить, существует ли функция, а затем удалить ее, если я это сделаю, я должен указать следующее:

DROP FUNCTION IF EXISTS Foo(My_Value INT);

Без указания входных параметров следующее возвращает сообщение об ошибке "NOTICE: функция foo() не существует, пропуская"

DROP FUNCTION IF EXISTS Foo();

Как и MySQL, есть ли способ удалить FUNCTION в PostgreSQL без необходимости указывать параметры функции? Другими словами, существует ли эквивалент для следующего в инструкции MySQL (т.е. Удалить хранимую процедуру без указания входных параметров)?

DROP PROCEDURE IF EXISTS Foo;

Ответы

Ответ 1

В функциях Postgres может быть перегружен, поэтому параметры необходимо различать перегруженные функции. Чтобы однозначно идентифицировать функцию, вы можете поместить только типы ее параметров.

DROP FUNCTION IF EXISTS Foo(INT);

Ответ 2

Как и в Postgres 10, вы можете отбрасывать функции только по имени, если имена уникальны для их схемы.

Пример:

drop function if exists Foo;

Документация здесь.