使用Java查找Postgresql安装位置

时间:2012-10-15 09:15:30

标签: java postgresql runtime.exec

我想找出Postgresql的安装位置,需要在postgresql.conf和pg_hba.conf文件中进行一些更改,然后重新启动Postgresql。

有没有办法识别可以应用于Windows / Unix / Linux的安装目录?任何帮助或建议都将非常感激。

2 个答案:

答案 0 :(得分:1)

问问PostgreSQL:

SHOW config_file;
SHOW hba_file;

或:

SELECT current_setting('config_file');
SELECT current_setting('hba_file');

当然,这需要PostgreSQL运行,侦听TCP / IP以及默认端口。它还要求您能够进行身份验证。您需要提示用户输入端口(默认为5432)和凭据。

没有通用方法来确定PostgreSQL数据目录位置而不询问正在运行的PostgreSQL实例,因为:

  • 可能有多个正在运行的PostgreSQL实例
  • Mac OS X上的PostgreSQL可能已通过Homebrew(Mac OS X),Postgres.app(Mac OS X),系统包管理(Linux),端口(BSD),EnterpriseDB安装程序,各种第三方汇总安装分发,.zip二进制文件,或来自源。
  • PostgreSQL可以从launchd(Mac OS X),作为Windows服务(Windows),从systemd / upstart / init(Linux / BSD)启动并运行,由pg_ctl用户手动启动等。可以在启动命令行上指定数据目录。

因此,你可以弄清楚PostgreSQL datadir的“位置”的整个想法是假的。

如果您正在编写依赖于PostgreSQL的软件,请考虑将您自己的副本与.zip二进制文件捆绑在一起,从pg_ctl开始并在非默认端口上运行它,这样它就不会干扰任何PostgreSQL安装用户可能已经自己安装了他们的系统。

答案 1 :(得分:0)

您可以定义自定义环境变量,例如POSTGRES_HOME,并使用类似于JAVA_HOME

的变量
 POSTGRES_HOME  = /usr/local/pgsql
 pg_hba.conf path =  POSTGRES_HOME/data/pg_hba.conf