如何从外壳中找到pg_hba.conf的路径?


101

我想从外壳程序获取pg_hba.conf的路径。路径因PostgreSQL版本而异。例如,对于8.4和9.1:

/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf

我已经尝试过该pg_config命令,但是它似乎并未包含此信息。

这样一来,我可以使用统一的命令打开pg_hba.conf文件,而使用其他PostgreSQL配置文件进行编辑。

我正在使用bash。


1
如何找到pg_hba.conf?
Pramod

1
@Pramod可能有数十人躺在附近。如果您想知道Postgres正在使用其中的哪一个,该怎么办。
流血的手指

@BleedingFingers根据您的设置,您可能只按访问时间进行过滤。find / -name pg_hba.conf -amin -5(如果服务器是在最近5分钟内重新启动的;很容易将其更改为-atime如果服务器是在更长时间前重新启动的)。或者,您可以按比更改时间新的访问时间进行过滤,或者按另一个查找基于时间的选项...(尽管lsof | grep pg_hba.conf在服务器运行时按进行过滤不起作用)。
Parthian Shot

Answers:


151

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';

并设置环境变量PGUSERPGDATABASE等等,以确保连接正确。

是的,这在某种程度上是个鸡与蛋的问题,因为如果用户无法连接(例如,在编辑搞砸之后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参数是否与您正在编辑的位置匹配,依此类推。


这对于9.3可能无效,我得到:psql: invalid port number: "format=unaligned"当我运行该psql命令时。
jcollum 2014年

@jcollum不,只是一个错字。-P-p。固定。
克雷格·林格2014年

如果您安装了多个版本的PostgreSQL,这是唯一可行的答案。
bonh 2013年

Postges希望将其标准化吗?这将极大地帮助解决安装难题……
Scott Skiles

@ScottSkiles PostgreSQL不能控制它,这取决于软件包和分发者,他们对软件包的位置都有强烈的(不同的)看法。
克雷格·林格

21

这是我的方法:

john@host:~$ ls /etc/postgresql
9.1
john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf

由于路径是这样的: /etc/postgresql/[VERSION]/main/pg_hba.conf


2

我正在使用以下配置文件检测:

$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)

1

pg_hba.conf使用默认的视觉编辑器(vim,emacs,nano,joe等)编辑正确的内容非常容易:

$VISUAL /etc/postgresql/$(ls /etc/postgresql)/main/pg_hba.conf



-2

要知道文件在哪里,只需键入:

pg_lsclusters

如果要更新pg_hba.conf文件,请发出以下命令:$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf
nirvanastack 2013年

-bash:pg_lsclusters:找不到命令
Mona Jalal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.