Rog*_*ahl 147 postgresql
我想从 shell 获取 pg_hba.conf 的路径。路径因 PostgreSQL 版本而异。例如,对于 8.4 和 9.1:
/etc/postgresql/8.4/main/pg_hba.conf
/etc/postgresql/9.1/main/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)
我已经尝试过该pg_config
命令,但它似乎不包含此信息。
这样我就可以使用统一的命令打开pg_hba.conf
其他 PostgreSQL 配置文件进行编辑。
我正在使用 bash。
Cra*_*ger 212
pg_config
用于编译信息,帮助扩展和客户端程序编译和链接到 PostgreSQL。它对机器上的活动 PostgreSQL 实例一无所知,只知道二进制文件。
pg_hba.conf
可以出现在许多其他地方,具体取决于 Pg 的安装方式。标准位置pg_hba.conf
在data_directory
数据库中(可能在/home
、/var/lib/pgsql
、/var/lib/postgresql/[version]/
、/opt/postgres/
等中),但用户和打包人员可以将它放在任何他们喜欢的地方。很遗憾。
find 唯一有效的方法pg_hba.conf
是询问正在运行的 PostgreSQL 实例它在哪里pg_hba.conf
,或者询问系统管理员它在哪里。您甚至不能依靠询问 datadir 在哪里并进行解析,postgresql.conf
因为 init 脚本可能会像-c hba_file=/some/other/path
启动 Pg一样传递参数。
你要做的是问PostgreSQL:
SHOW hba_file;
Run Code Online (Sandbox Code Playgroud)
此命令必须在超级用户会话上运行,因此对于 shell 脚本,您可能会编写如下内容:
psql -t -P format=unaligned -c 'show hba_file';
Run Code Online (Sandbox Code Playgroud)
并设置环境变量PGUSER
,PGDATABASE
等以确保连接正确。
是的,这在某种程度上是一个先有鸡还是先有蛋的问题,因为如果用户无法连接(例如,在搞砸了编辑之后pg_hba.conf
),您将无法找到pg_hba.conf
并修复它。
另一种选择是查看ps
命令的输出并查看 postmaster 数据目录参数-D
是否在那里可见,例如
ps aux | grep 'postgres *-D'
Run Code Online (Sandbox Code Playgroud)
因为pg_hba.conf
将在数据目录中(除非您使用的是 Debian/Ubuntu 或某些衍生产品并使用它们的软件包)。
如果您专门针对从 Debian/Ubuntu 软件包安装了 PostgreSQL 的 Ubuntu 系统,它会变得更容易一些。您不必处理某人initdb
在其主目录中使用的从源代码手动编译的 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
参数是否与您正在编辑的位置相匹配,等等。
its*_*_me 28
这就是我的做法:
john@host:~$ ls /etc/postgresql
9.1
john@host:~$ sudo vim /etc/postgresql/9.1/main/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)
由于路径是这样的: /etc/postgresql/[VERSION]/main/pg_hba.conf
小智 6
我使用以下配置文件检测:
$(ls /etc/postgresql/*/main/pg_hba.conf)
$(ls /etc/postgresql/*/main/postgresql.conf)
Run Code Online (Sandbox Code Playgroud)
使用命令行,询问您的数据库:
$ psql -U postgres
postgres=# SHOW config_file;
Run Code Online (Sandbox Code Playgroud)
小智 5
要查找 pg_hba.conf 的路径,请使用以下命令:
sudo -u postgres psql -t -P format=unaligned -c 'show hba_file';
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
524552 次 |
最近记录: |