How to list databases owned by rolename in postgresql
我在root中执行的bash中尝试的代码。
1 2 3 4 5 | #!/bin/bash su - postgres <<EOF1 F="$(psql -d postgres --tuples-only -P format=unaligned -c"SELECT datname FROM pg_database JOIN pg_authid ON pg_database.datdba = pg_authid.oid WHERE rolname = 'username'")" EOF1 echo $F |
它给出了输出
错误:关系pg_authid的权限被拒绝
但是,当我尝试
1 2 3 | su - postgres <<EOF1 psql -d postgres --tuples-only -P format=unaligned -c"SELECT datname FROM pg_database JOIN pg_authid ON pg_database.datdba = pg_authid.oid WHERE rolname = 'username'" EOF1 |
这将打印该用户名的所有数据库。 为什么这样?
我需要将输出存储到bash变量以进行进一步处理。
是否有任何错误或任何其他方式尝试这一点..
谢谢。
内部
1 2 | command="psql -d postgres --tuples-only -P format=unaligned -c "SELECT datname FROM pg_database JOIN pg_authid ON pg_database.datdba = pg_authid.oid WHERE rolname = 'username'"" F=$( su - postgres -c"$command" ) |
但是你可以把它们放在一起:
1 | F=$( su - postgres -c"psql -d postgres --tuples-only -P format=unaligned -c "SELECT datname FROM pg_database JOIN pg_authid ON pg_database.datdba = pg_authid.oid WHERE rolname = 'username'"" ) |
我还应该注意,第一个失败的示例可能不会将