我正在尝试学习 PostgreSQL 管理并开始学习如何使用psql
命令行工具。
当我使用 登录时psql --username=postgres
,如何列出所有数据库和表?
我曾尝试\d
,d
并dS+
但没有列出。我已经用 pgAdmin III 创建了两个数据库和几个表,所以我知道它们应该被列出。
我想使用 psql 列出 Postgres 服务器上的所有数据库,以便由脚本解析。此命令列出了它们:
psql -l -A -t
Run Code Online (Sandbox Code Playgroud)
但输出显示了一个明显的问题:记录由换行符分隔,但也包含换行符。
$ psql -l -A -t
postgres|postgres|UTF8|en_CA.UTF-8|en_CA.UTF-8|
template0|postgres|UTF8|en_CA.UTF-8|en_CA.UTF-8|=c/postgres
postgres=CTc/postgres
template1|postgres|UTF8|en_CA.UTF-8|en_CA.UTF-8|=c/postgres
postgres=CTc/postgres
Run Code Online (Sandbox Code Playgroud)
使用 -R 选项我可以更改记录分隔符,但似乎无论我将其更改为什么,都存在该字符串出现在数据中的风险。是否可以告诉 psql 用其他东西替换数据中的换行符?(然后如果该字符串也出现在数据中呢?)
我还尝试设置的记录分隔符为空字符这样的序列-R '\000'
和-R "\0"
,但它似乎并没有解释转义序列在所有的参数,并且只使用文本字符串\000
代替。
我知道列出所有数据库的另一个选项是:
psql --quiet --no-align --tuples-only --dbname=postgres --username=postgres --host=127.0.0.1 --port=5432 --command="SELECT datname FROM pg_database"
Run Code Online (Sandbox Code Playgroud)
但这需要我为 postgres 用户提供密码,所以这是不可取的。也许还有另一种方法可以获得所有数据库的名称列表?