功能在PostgreSQL中出现在哪里?

时间:2013-01-18 13:18:07

标签: sql database postgresql

在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;

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

Richard Huxton是对的:无论您在SQL语句中何处使用表达式,您都应该能够使用函数。

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

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

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

这有效地让您可以在任何地方使用功能。