Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    41

    [Java] Eseguire pg_restore da codice java

    Ciao, la mia applicazione dovrebbe essere in grado di fare il restore di un database postgres senza che l'utente debba mettersi a digitare i comandi da terminale.
    Ho deciso quindi di utilizzare il seguente codice:

    codice:
    public void restore(String file){
    	try {
    	        ProcessBuilder pb = new ProcessBuilder("pg_restore", "-h", host, "-d", dbName,
                                               "-U", SystemManager.USERNAME_DB, file);
    	        //pb.environment().put("PGPASSWORD", "********");
    	        pb.redirectErrorStream(true);
    	        pb.start();
    	    } catch (Exception e) {
    	    	e.printStackTrace();
    	    }
    }
    Naturalmente dentro le variabili host, dbName e file ci sono i dati corretti.
    Il tutto non funziona anche se penso che sia corretto. non riesco a capire perchè.
    Ho provato anche decommentando la riga che adesso è commentata (nel codice che ho preso da esempio era decommentata) ma non va lo stesso.
    Se lancio lo stesso comando da linea di comando (quindi visto che sono su Widows da cmd.exe) il restore viene eseguito.

    Se può servire, il dunp del DB lo faccio sempre da Java tramite un metodo speculare:
    codice:
    public void eseguiBackup(String path){
    	try {
    	        ProcessBuilder pb = new ProcessBuilder("pg_dump", "-h", host, "-Fc", "-f", path,
                                            "-U", SystemManager.USERNAME_DB, dbName);
    	        pb.redirectErrorStream(true);
    	        pb.start();
    	    } catch (Exception e) {
    	    	e.getMessage();
    	    }
    }
    Questo metodo viene eseguito correttamente e il dump viene effettuato.

    Qualcuno riesce a capire dove è l'inghippo??

    Grazie mille!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    dire "non va" aiuta poco. Ti esce qualche messaggio d'errore?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    41
    No, altrimenti l'avrei postato...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Prova con:
    codice:
    ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "start", "pg_restore", ...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    41
    Originariamente inviato da Andrea1979
    Prova con:
    codice:
    ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "start", "pg_restore", ...
    Niente nemmeno così.
    Ho provato però ad aggiungere il parametro -W al mio comando in modo da forzare la richiesta della password.
    Il comando in effetti viene avviato ed eseguito ma non produce nessun risultato... molto strano.
    Ho anche provato ad eseguire solo:

    ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", "start");

    Questo apre una console, poi ho scritto pg_restore -h ecc ecc e il comando è stato di nuovo eseguito ma senza aver apportato nessuna modifica al DB.

    Mi sono per caso perso qualcosa che ha a che fare con i permessi?

    PS: ho dimenticato di dirvi che ho già aggiunto la cartella dove risiede pg_restore alla variabile di sistema Path, quindi il problema non può essere che l'eseguibile non viene visto.




    EDIT: Non so perchè ma dopo aver di nuovo scritto la variabile di sistema Path tutto funziona...
    Se qualcuno è interessato ho utilizzato la mia soluzione e non quella postata da Andrea 1979, anche se a questo punto credo che anche quella funzioni.
    Bene!

    Grazie per l'aiuto

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ottimo.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.