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