使用bash脚本,我试图为PostgreSQL角色设置只读权限:
使用psql
函数调用pgexec
命令:
pgexec() {
local cmd=$1
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
返回错误。
我使用了调试,SQL查询看起来还可以
答案 0 :(得分:1)
output
捕获命令的标准输出,但不捕获标准错误。
要捕获标准错误以及标准输出,请使用
output=$(pgexec "..." 2>&1)
您的错误是忽略了&
。这样,标准错误最终会存储在名为1
的文件中。