PostgreSQL:删除不带参数的函数

问题描述 投票:0回答:3

我创建了一个函数,如下所示:

CREATE FUNCTION my_func(value INTEGER) RETURNS VOID AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;

但是我需要指定参数来删除该函数,如下所示:

DROP FUNCTION my_func(value INTEGER);

因为如果不指定参数如下图:

DROP FUNCTION my_func;

然后,我收到以下错误:

错误:函数名称“my_func”不唯一
提示:指定参数列表以明确选择函数。

那么,我可以删除一个不带参数的函数吗?

sql database postgresql plpgsql drop
3个回答
119
投票

在Postgres函数中可以重载,因此需要参数来区分重载函数。要明确标识一个函数,您可以仅输入其参数的类型。

DROP FUNCTION my_func(INT);

59
投票

从 Postgres 10 开始,您只能按名称删除函数,只要名称对于其架构是唯一的。

示例:

drop function my_func;

文档这里


0
投票

如果有多个同名函数,则需要用

()
指定零个或多个参数。 *文档解释了函数重载

例如,您创建 2 个函数,如下所示:

CREATE FUNCTION my_func() RETURNS VOID AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION my_func(value INTEGER) RETURNS VOID AS $$
BEGIN
END;
$$ LANGUAGE plpgsql;

然后,您可以使用下面的 SQL 删除第一个函数:

DROP FUNCTION my_func();

或者,您可以使用下面的 SQL 删除第二个函数:

DROP FUNCTION my_func(INTEGER);

并且,您创建了 2 个过程,如下所示:

CREATE PROCEDURE my_proc() LANGUAGE plpgsql AS $$
BEGIN
END;
$$;
CREATE PROCEDURE my_proc(value INTEGER) LANGUAGE plpgsql AS $$
BEGIN
END;
$$;

然后,您可以使用以下 SQL 删除第一个过程:

DROP PROCEDURE my_proc();

或者,您可以使用下面的 SQL 删除第二个过程:

DROP PROCEDURE my_proc(INTEGER);
© www.soinside.com 2019 - 2024. All rights reserved.