java - 使用Java查找Postgresql安装位置

标签 java postgresql runtime.exec

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

有没有办法识别安装目录,适用于Windows/Unix/Linux?任何帮助或建议将不胜感激。

最佳答案

询问 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)、ports (BSD)、EnterpriseDB 安装程序、各种第 3 方汇总安装的发行版、.zip 二进制文件或来自源代码。
  • PostgreSQL 可以从 launchd (Mac OS X)、作为 Windows 服务 (Windows)、从 systemd/upstart/init (Linux/BSD) 启动并运行,由用户使用 pg_ctl 手动启动和运行等。可以在启动命令行中指定数据目录。

因此,您可以找出 PostgreSQL 数据目录“位置”的整个想法都是假的。

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

关于java - 使用Java查找Postgresql安装位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12892532/

相关文章:

python - Django 会自动创建索引吗?

java - 使用 StreamGobbler 处理输入

java - Android GameHelper 排行榜关闭监听器/检测器

java - 小程序中的netty抛出AccessControlException

postgresql - 从大型(> 100 MIo)postgresql 表中删除重复行(有条件截断?)

postgresql - PLV8 是否支持对其他服务器进行 http 调用?

java - 通过java运行的执行程序似乎超时?

java - 将带空格的字符串传递给 Java 中的执行命令以执行 bash 脚本

java - 在 Spring 中与 JBOSS 一起使用 native 库

Java arraylist之arraylist - 用类对象创建多维arraylist