Ejecutar comandos de Postgresql de la consola psql desde Java

postgreSQLYJava

A veces necesitamos ejecutar comandos de Postgresql de la consola psql desde Java, donde además no podemos usar el prompt para suministrar la contraseña de forma interactiva.

Para esto podemos usar un archivo de contraseñas (.pgpass) o usando variables de entorno; en nuestro caso vamos a crear un archivo shell (Prueba.sh) con lo siguiente:

#!/bin/bash

#Ejemplo con archivo de claves
#export PGPASSFILE=/path/.some_pgpass
#psql -w -h localhost -U usuario.nombre -d db.nombre -c 'select * from usuario'


#Ejemplo con variables de entorno
PGHOST=direccionip PGPORT=5432 \
   PGDATABASE=db.nombre \
   PGUSER=user.nombre PGPASSWORD=laclave \
psql -w  -U usuario.nombre -d db.nombre -c 'select * from usuario'

Notese que el -w es para que no nos solicite la contraseña y en vez de usar un archivo de contraseña podemos usar las variables de entorno PGHOSTPGPORT,PGDATABASEPGUSER y PGPASSWORD

Posteriormente creamos una clase Java que lo único que hará será llamar el archivo shell con lo siguiente:

public class PruebasMain {
	
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {
			String finalCommand = "./Prueba.sh";
			
			Process pro = Runtime.getRuntime().exec(finalCommand);
			
			BufferedReader br = new BufferedReader(new InputStreamReader(pro.getInputStream()));
            String line="";
            while ((line = br.readLine()) != null) {
                System.out.println("OK : " + line);
            }

	    	br = new BufferedReader(new InputStreamReader(pro.getErrorStream()));
            line = "";
            while ((line = br.readLine()) != null) {
                System.out.println("ERROR : " + line);
            }
		} catch (Exception e) {
            e.printStackTrace();
        }
    }

}

Posteriormente podemos agregarle parametros o complejizarlo según lo requiramos.

Referencia [1]

Un comentario en “Ejecutar comandos de Postgresql de la consola psql desde Java

Deja un comentario