4

我正在使用下面的 Java 语句从 Java 代码启动 PostgreSQL 服务器。我正在使用Runtime.getRuntime().exec()方法来实现这一点。

 final Process startServer = Runtime.getRuntime().exec("PostgreQL -D data/dir/ start");

在这里,当服务器启用 SSL 并且密钥受密码保护时,在命令行中会提示输入密码(请参见下面的行)。在这种情况下,我该如何传递密码。

Is server running?
starting server anyway
waiting for server to start......Enter PEM pass phrase:....

提示时,我们是否可以选择将密码作为参数传递?或者在 PostgreSQL 中,我们是否有任何规定可以传递密码(例如PostgreSQL -d data/dir/ -keyPass password start)?

4

3 回答 3

4

您可以打开进程的 OutputStream 并传递将由服务器读取的密码,就好像您输入的密码来自 STDIN。

final Process startServer = Runtime.getRuntime().exec("PostgreQL -D data/dir/ start");
PrintStream ps = new PrintStream(startServer.getOutputStream());
ps.println(passPhrase);
于 2013-02-01T04:56:15.173 回答
1

上面提供的答案的一种替代方法是创建密码文件。

(例如~/.pgpass文件(Windows 上的 %APPDATA%\postgresql\pgpass.conf)格式为:

hostname:port:database:username:password
于 2013-02-01T04:59:13.380 回答
1

从看看开始ProcessBuilder,它会让你的生活更轻松......

ProcessBuilder pb = new ProcessBuilder("PostgreQL", "-D", "data/dir/" "start");
Process p = pb.start();

InputStream is = p.getInputStream();
OutputStream os = p.getOutputStream();

// Create a separate thread to read the input as needed...
// Create a seperate thread to deal with the output as needed...
于 2013-02-01T05:03:09.613 回答