我在我的组织中担任 Postgres DBA。我们目前正在 SUSE Linux 服务器上开发 Postgres 9.5。我想要一个特定的解决方案。我们有多台 SUSE Linux 服务器,每台服务器可以托管一个或多个 Postgres 数据库。我的要求是我需要找到特定服务器上所有可用数据库的列表,而不管数据库是启动并运行还是关闭。
Postgres 是否有任何文件或任何位置记录在服务器上创建的所有数据库。有没有一种方法可以在不连接到 Postgres 实例且不运行任何 PSQL 命令的情况下获取所需的详细信息?
如果不是,获取列表的最佳方式是什么。任何提示、解决方案和想法都会帮助我解决这个问题。
非常感谢您的提前帮助。
在 PostgreSQL 中,一个服务器进程服务于一个数据库集群,它物理上位于一个数据目录。
一个PostgreSQL集群包含若干个数据库,所有的数据库都在服务器进程关闭时关闭
所以你的问题可以分为两部分:
如何找出一台机器上有哪些数据库集群,不管它们是否启动?
如何在集群关闭的情况下找出集群内的所有数据库?
第一个问题没有通用的答案,因为数据目录原则上可以无处不在并且可以属于任何用户。
你可以得到一个近似值
find / -name PG_VERSION
但最好找到适合您设置的特殊解决方案(您没有告诉我们)。
第二题更难
即使要获得数字 ID 列表,您也必须知道所有表空间目录。 default tablespace里面的就是数据目录下
base
子目录下的子目录名
为了获取数据库的名称,您必须启动 PostgreSQL 服务器,因为非常很难找到属于
pg_database
的文件并解析它。