代码之家  ›  专栏  ›  技术社区  ›  stiller_leser

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

  •  1
  • stiller_leser  · 技术社区  · 6 年前

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

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

    有什么提示可以实现这一点吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   clemens    6 年前

    你不能合并 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
    $_$;