使用 bash 授予 PostgreSQL 角色只读权限

Grant read-only privileges to a PostgreSQL role using bash

使用 bash 脚本我正在尝试为 PostgreSQL 角色设置只读权限:

使用pgexec函数调用psql命令:

pgexec() {
    local cmd=
    sudo -u postgres psql  -c "$cmd" 
}

我将上面的函数用于多个 psql 命令(一行或多行)

function set_permissions(){
...
    if [[ $permissions == read ]]
        then
            output=$(pgexec "GRANT CONNECT ON DATABASE ${database} TO ${role};
                    \c ${database};
                    GRANT USAGE ON SCHEMA ${schema} TO ${role};
                    GRANT SELECT ON ALL TABLES IN SCHEMA ${schema} TO ${role};
                    GRANT SELECT ON ALL SEQUENCES IN SCHEMA ${schema} TO ${role};
                    ALTER DEFAULT PRIVILEGES IN SCHEMA ${schema} GRANT SELECT ON TABLES TO ${role};
                    ALTER DEFAULT PRIVILEGES IN SCHEMA ${schema} GRANT SELECT ON SEQUENCES TO ${role};" 2>1)
            if [[ "$?" -eq 0 ]]
                then
                    echo "${role_name} was granted permissions $perm_read"
                    return 0    
                else    
                    echo "Error - $output"
                    return 4    
            fi      
...
}

我得到的结果是

Error - . 

我希望 $output 到 return 错误。

我使用了调试,SQL 查询看起来不错

output 捕获命令的标准输出,但不捕获标准错误。

要捕获标准错误和标准输出,请使用

output=$(pgexec "..." 2>&1)

您的错误是省略了 &。这样标准错误最终会出现在一个名为 1.

的文件中