pg_config
用于提供编译信息,以帮助扩展和客户端程序针对PostgreSQL进行编译和链接。它对计算机上的活动PostgreSQL实例一无所知,仅对二进制文件一无所知。
pg_hba.conf
可以在其他许多地方出现,具体取决于Pg的安装方式。的标准位置是pg_hba.conf
内部的data_directory
数据库(它可能是/home
,/var/lib/pgsql
,/var/lib/postgresql/[version]/
,/opt/postgres/
,等等等等),但用户和包装可以把它放在任何地方,他们喜欢。不幸。
查找的唯一有效方法pg_hba.conf
是询问运行中的PostgreSQL实例所在的pg_hba.conf
位置,或询问sysadmin。您甚至不必依靠询问datadir在哪里并进行解析,postgresql.conf
因为初始化脚本可能会像-c hba_file=/some/other/path
启动Pg时那样传递参数。
您要做的是询问PostgreSQL:
SHOW hba_file;
该命令必须在超级用户会话上运行,因此对于shell脚本编写,您可能会编写如下内容:
psql -t -P format=unaligned -c 'show hba_file';
并设置环境变量PGUSER
,PGDATABASE
等等,以确保连接正确。
是的,这在某种程度上是个鸡与蛋的问题,因为如果用户无法连接(例如,在编辑搞砸之后pg_hba.conf
),就找不到pg_hba.conf
修复它的方法。
另一个选择是查看ps
命令的输出,并查看postmaster数据目录参数-D
在此处是否可见,例如
ps aux | grep 'postgres *-D'
因为pg_hba.conf
它将位于数据目录中(除非您使用Debian / Ubuntu或某些派生工具并使用其软件包)。
如果您要专门针对从Debian / Ubuntu软件包安装了PostgreSQL的Ubuntu系统,它会变得容易一些。您不必处理某人initdb
在其主目录中为其提供的da datadir 手工编译的Pg,也无需处理在/ opt中安装的EnterpriseDB Pg等。您可以询问pg_wrapper
Debian / Ubuntu多版本Pg管理器,其中的PostgreSQL使用的pg_lsclusters
命令从pg_wrapper
。
如果无法连接(Pg未运行,或者需要编辑pg_hba.conf
以连接),则必须在系统中搜索pg_hba.conf
文件。在Mac和Linux上,类似的功能sudo find / -type f -name pg_hba.conf
会起作用。然后,检查PG_VERSION
同一目录中的文件,以确保它是正确的PostgreSQL版本(如果有多个版本)。(如果pg_hba.conf
在/etc
/中,请忽略它,它是父目录名称)。如果同一PostgreSQL版本有多个数据目录,则必须查看数据库大小,请检查正在运行的postgres的命令行,ps
以查看其数据目录-D
参数是否与您正在编辑的位置匹配,依此类推。