Как бы я использовал ExpectJ для вызова pg_dump (на PostgreSQL 8.4) в Java? - PullRequest
0 голосов
/ 23 июля 2010

Я видел эту проблему во многих местах, то есть проблема с программным созданием резервных копий из 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 по какой-то причине не получает приглашение.

Любая помощь будет принята с благодарностью.

СпасибоМэтт

1 Ответ

1 голос
/ 23 июля 2010

Я уверен, что более простой способ сделать это без необходимости ожидать и отправить, это через .pgpass файл .Также упоминается в pg_dump документах .

...