1

给定 PostgreSQL 中的一个函数xyz(),我在哪里以及如何实际使用它?

以函数current_database()为例。然后我可以执行以下查询:

SELECT current_database();
SELECT * FROM current_database();

在这种情况下,两者都会导致输出:

 current_database
------------------
 cassava
(1 row)

还有其他地方可以使用这个功能吗?

特别是:我怎样才能编写以下内容,以便它工作(因为它目前的情况,它没有)。

GRANT ALL ON DATABASE current_database() TO GROUP wheel WITH GRANT OPTION;
4

2 回答 2

1

您不能在纯 SQL 中执行 GRANT ALL 示例,因为语法需要标识符 - 而不是返回标识符的表达式。

任何可以在 SQL 语句中使用表达式的地方都应该可以使用函数。

除此之外,您将需要使用 plpgsql(或其他过程语言之一)来动态构建查询字符串。

于 2013-01-18T14:16:38.827 回答
0

Richard Huxton 是对的:只要在 SQL 语句中可以使用表达式,就应该可以使用函数。

然而, PostgreSQL 有DO 扩展,它允许您运行过程语言而无需创建函数。这使得构建动态查询变得容易。

对于特定情况(省略WITH GRANT OPTION):

DO $$
    BEGIN
    EXECUTE 'GRANT ALL ON DATABASE ' || current_database() || ' TO GROUP wheel';
    END;
$$;

这有效地使您可以在任何地方使用函数。

于 2013-01-21T08:45:25.543 回答