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

を見て始めると、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 に答える
1

上記の回答に代わる方法の 1 つは、パスワードファイルを作成することです。

(たとえば、~/.pgpassファイル (Windows では %APPDATA%\postgresql\pgpass.conf) は次のようにフォーマットされます。

hostname:port:database:username:password
于 2013-02-01T04:59:13.380 に答える