我正在尝试授予当前数据库(其名称我不知道)上的新用户权限。
基本上我想要实现这样的内容:
grant all privileges on database $(SELECT current_database();) to my_new_user;
有什么提示可以实现这个吗?
我正在尝试授予当前数据库(其名称我不知道)上的新用户权限。
基本上我想要实现这样的内容:
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
$_$;
%s
周围添加""
。 - stiller_leser%I
转换即可。如果需要,它会自动包含引号。 - pyramation