PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Restaurer la base de données PostgreSQL en utilisant Java

Il est surprenant que la commande que vous affichez fonctionne du tout, car vous ne parvenez pas à citer les espaces dans le chemin de la commande. Essayez :

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);

Modifications :

  • Convertissez la forme de chaîne unique en la forme de tableau d'arguments beaucoup plus sûre de exec appeler ;
  • Doublez les barres obliques inverses dans rawDatabase chemin puisque votre commande d'origine ne parvient pas à échapper les barres obliques inverses, donc \r est un retour chariot dans la chaîne au lieu du \ caractère suivi du r caractère.
  • Passez aux doubles barres obliques inverses au lieu des barres obliques dans le chemin du programme pour plus de cohérence. Ce changement n'a probablement pas d'importance.

Vérifiez également l'état de retour du processus. Vous devez utiliser Process.waitFor() puis une fois qu'il est sorti, utilisez Process.exitValue() pour déterminer le résultat. Vous devriez examiner les stderr et stdout capturés par le Process objet pour les erreurs et les informations de journalisation.

La raison pour laquelle votre programme continue de ne pas fonctionner est probablement que :

  • Vous avez l'ancien pg_restore processus suspendus tenant des verrous ; et/ou
  • Vous n'utilisez pas stdout et stderr donc pg_restore manque d'espace de canal tamponné et bloque l'écriture sur le flux de sortie.

Tout cela sera beaucoup plus simple si vous utiliser ProcessBuilder à la place . ProcessBuilder vous permet de fournir des flux de fichiers sur lesquels écrire la sortie et s'en occupe généralement pour vous. Vous devez toujours attendre que le processus se termine et vérifier son code de retour.