pg_hba.conf和pg_ctl的路径 - 自动提取方式

时间:2013-12-30 04:31:37

标签: postgresql

我正在编写对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

感谢。

1 个答案:

答案 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