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

标签 sql postgresql

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

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

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/

相关文章:

postgresql - 如何检查函数是否不可变?

sql - 包含 Sequelize 的列表中的列

java - Spring Data JpaRepository "JOIN FETCH"返回重复项

sql - Laravel 5 - Eloquent 查询 - 这可能吗?

database - 我需要在 Postgresql 中增加 max_connections 吗?

postgresql - 合并两个查询结果

mysql - 使用 SQL 计算字符串和 Group By 中字符的出现次数

java - 如何在批处理中获取包含异常的精确sql查询

hibernate - 将hibernate sql结果存储到arraylist

mysql - 定期将数据从 SQL 镜像到 NoSQL 的最佳方法?