0

私はこの問題を多くの場所で見ました。つまり、PostgreSQLからプログラムでバックアップを作成する際の問題です。私の解決策はExpectJを使用することですが、コードを機能させるのに問題があります。

私は次のコードを持っています:

public class BackupUtility 
{
 public static void main(String[] args)
 {

  try
  {
   ExpectJ exp = new ExpectJ(20);
   Spawn shell = exp.spawn("\"C:\\Program Files\\PostgreSQL\\8.4\\bin\\pg_dump.exe\" " +
                           "-h localhost -U myUserName myDB");
   shell.expect("Password: ");
   shell.send("myPassword");

   System.out.println(shell.getCurrentStandardOutContents());

   shell.expectClose()
  }
  catch (Exception e) 
  {
   e.printStackTrace();
  }   
 }
}

ただし、shell.expect行では、タイムアウトになっています。

コマンドプロンプトからこのコマンドを実行すると、次のようになります。

C:\ Documents and Settings \ bobjonesthe3rd> "C:\ Program Files \ PostgreSQL \ 8.4 \ bin \ pg_dump" -h localhost -U myUserName myDB
パスワード:

つまり、パスワードの入力を求めるプロンプトが表示されることはわかっていますが、ExpectJは何らかの理由でプロンプトを受信して​​いません。

どんな助けでも大歓迎です。

ありがとう、マット

4

1 に答える 1

1

これを行う簡単な方法は、expectとsendを使用せずに、.pgpassファイルを使用することです。pg_dumpドキュメントでも参照されています。

于 2010-07-23T05:05:06.590 に答える