我正在编写对pg_hba.conf的一些更改,我正在寻找一种自动方式来查找它的位置。同样,我也需要pg_ctl的路径来重新加载配置。我可以使用pg_clusters来查找数据目录,但我无法使用它来获取pg_hba.conf和pg_ctl的位置。有什么建议吗?
以下是我在ubuntu上的这些内容的位置:
pg_hba.conf: /etc/postgresql/9.3/main/pg_hba.conf
PGDATA: /var/lib/postgresql/9.3/main
pg_ctl: /usr/lib/postgresql/9.3/bin
感谢。
答案 0 :(得分:7)
通过PostgreSQL协议连接,您可以获取datadir,配置文件和hba文件位置。
postgres=# SHOW hba_file;
hba_file
-------------------------------------
/var/lib/pgsql/9.3/data/pg_hba.conf
(1 row)
postgres=# SHOW config_file ;
config_file
-----------------------------------------
/var/lib/pgsql/9.3/data/postgresql.conf
(1 row)
postgres=# SHOW data_directory;
data_directory
-------------------------
/var/lib/pgsql/9.3/data
(1 row)
您也可以通过PostgreSQL协议重新加载配置:
postgres=# SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
所有这些详细信息都可以在psql
中的bash
次调用中获取(如果您不介意编写bash
特定的非便携式shell),并正确处理空格分隔值,用:
$ IFS='|' pgconf=($(psql -U postgres -qAt -F '|' -c "SELECT current_setting('hba_file'), current_setting('config_file'), current_setting('data_directory');"))
生成一个包含三个值的bash数组:
$ echo ${pgconf[0]}
/var/lib/pgsql/9.3/data/pg_hba.conf
$ echo ${pgconf[1]}
/var/lib/pgsql/9.3/data/postgresql.conf
$ echo ${pgconf[2]}
/var/lib/pgsql/9.3/data