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_wrapperDebian / 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参数是否与您正在编辑的位置匹配,依此类推。