我正在尝试授予新用户对当前数据库(我不知道其名称)的权限。
基本上我想归档这样的东西:
grant all privileges on database $(SELECT current_database();) to my_new_user;
有什么提示可以实现吗?
最佳答案
您不能将 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 %I TO my_new_user', the_database);
END
$_$;
关于sql - 在 Postgresql 中授予动态数据库名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52651776/