在Postgresql中授予动态数据库名称

时间:2018-10-04 16:44:25

标签: sql postgresql

我正在尝试授予新用户对当前数据库的权限(我的名字不知道)。

基本上我想存档这样的东西:

grant all privileges on database $(SELECT current_database();) to my_new_user;

有人暗示如何实现这一目标吗?

1 个答案:

答案 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
$_$;