我正在尝试授予新用户对当前数据库的权限(我的名字不知道)。
基本上我想存档这样的东西:
grant all privileges on database $(SELECT current_database();) to my_new_user;
有人暗示如何实现这一目标吗?
答案 0 :(得分:2)
您不能将GRANT
与查询直接组合,但是可以写一个小块来实现。由于GRANT
仅允许数据库名称而没有变量,因此您必须将命令创建为字符串并使用EXECUTE
来执行:
DO $_$
DECLARE
the_database TEXT := CURRENT_DATABASE();
BEGIN
EXECUTE FORMAT('GRANT ALL PRIVILEGES ON DATABASE %s TO my_new_user', the_database);
END
$_$;
附录:如果数据库名称可能包含特殊字符(如破折号),则应将该名称用双引号引起来:
DO $_$
DECLARE
the_database TEXT := CURRENT_DATABASE();
BEGIN
EXECUTE FORMAT('GRANT ALL PRIVILEGES ON DATABASE "%s" TO my_new_user', the_database);
END
$_$;