Ответ 1
В функциях Postgres может быть перегружен, поэтому параметры необходимо различать перегруженные функции. Чтобы однозначно идентифицировать функцию, вы можете поместить только типы ее параметров.
DROP FUNCTION IF EXISTS Foo(INT);
Я могу успешно создать функцию следующим образом:
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;
В функциях Postgres может быть перегружен, поэтому параметры необходимо различать перегруженные функции. Чтобы однозначно идентифицировать функцию, вы можете поместить только типы ее параметров.
DROP FUNCTION IF EXISTS Foo(INT);
Как и в Postgres 10, вы можете отбрасывать функции только по имени, если имена уникальны для их схемы.
Пример:
drop function if exists Foo;
Документация здесь.