在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;
答案 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;
$$;
这有效地让您可以在任何地方使用功能。