sql >> Databáze >  >> RDS >> PostgreSQL

Obnovte databázi PostgreSQL pomocí Java

Je překvapivé, že vámi zobrazený příkaz vůbec funguje, protože v cestě příkazu neuvádíte mezery. Zkuste:

String[] cmd = {
    "D:\\Program Files\\PostgreSQL\\9.1\\bin\\pg_restore.exe",
    "--host", "localhost",
    "--port", "5432",
    "--username", "postgres",
    "--dbname", "mytestqq",
    "--role", "postgres",
    "--no-password",
    "--verbose",
    "D:\\sathish\\rawDatabase.backup"
};
p = r.exec(cmd);

Změny:

  • Převeďte jednořetězcovou formu na mnohem bezpečnější formu pole argumentů exec zavolat;
  • Zdvojte zpětná lomítka v rawDatabase cestu, protože váš původní příkaz nedokáže uniknout zpětným lomítkům, takže \r je znak konce řádku v řetězci namísto \ char následovaný znakem r char.
  • Přepněte na zdvojená zpětná lomítka namísto dopředných lomítek na cestě programu, abyste zajistili konzistenci. Tato změna pravděpodobně nevadí.

Zkontrolujte také stav vrácení procesu. Musíte použít Process.waitFor() poté, jakmile bude ukončen, použijte Process.exitValue() k určení výsledku. Měli byste prozkoumat stderr a stdout zachycené Process objekt pro chyby a protokolování informací.

Důvod, proč váš program nadále nefunguje, je pravděpodobně následující:

  • Máte staré pg_restore procesy visící kolem držení zámků; a/nebo
  • Nespotřebováváte stdout a stderr, takže pg_restore dojde místo ve vyrovnávací paměti a blokuje zápis ve výstupním proudu.

To vše bude mnohem jednodušší, pokud použijte ProcessBuilder místo . ProcessBuilder vám umožňuje poskytovat datové proudy souborů pro zápis výstupu a obecně se o mnohé postará za vás. Stále však musíte počkat na ukončení procesu a zkontrolovat jeho návratový kód.



  1. ORA-24550:signál přijat:chyba [si_signo=6]

  2. sql, pokud je v příkazu insert bez select

  3. MariaDB SUBSTR() Vysvětleno

  4. Chyba syntaxe SQL – vzorec Haversine