我们的产品包含多个数据库。我可以通过执行psql -tAc '\l' | cut -f 1 -d \|
列出这些数据库。
但是,有些数据库名称看起来很奇怪,我想知道原因。
abc_clienta
abc_clientb
abc=CTc/abc
abcdump=C/abc
编辑:我已经向数据库管理员询问了这些,他不知道,所以我推测这些是特定于PostgreSQL的“元数据库”。所以我想我的第一个问题应该是 PostgreSQL是否有不同类型的数据库?
编辑2:我相信(并被告知)这些是PostgreSQL特定表的原因之一是,还有这些类型的数据库:
= postgres的四氯化碳/ postgres的 postgres的= CTC / postgres的
是的,上面的条目列出两次,因为它在输出中出现两次。我不知道PostgreSQL如何拥有多个同名的数据库。
编辑3:我应该创建一个单独的SO帐户来询问工作问题,因为我们以不寻常的方式做事,以至于我为其他人做出的愚蠢的设计决定投票。
答案 0 :(得分:1)
这些不是数据库名称。它们是数据库访问控制权限。 -tA
的{{1}}选项仅表示返回元组(不是标题),并且不对齐数据。与psql
命令结合使用时,实际上是返回PostgreSQL 访问控制权限,而不是数据库名称。
答案 1 :(得分:0)
您可能会发现直接查询系统目录更简单。您可以将SQL语句传递给psql。它将写入输出并退出,因此您可以在shell脚本中使用它。
$ echo 'select datname from pg_database;' | psql -tA -U postgres template1 template0 postgres sandbox
通常情况下,我会转到information_schema来获取此类内容,但似乎并不是包含所有数据库名称的视图。 "数据名"尽管如此,色谱柱的稳定性至少在8.4到9.3之间,所以我不会因此而失去很多睡眠。