tables postgres databases create database postgresql shell

database - postgres - ¿Cómo ejecutar consultas múltiples usando el comando psql desde el shell bash?



tables postgres (4)

El parámetro --file ejecuta el contenido de un archivo.

psql -U postgres -h <ip_addr> -f "my_file.psql"

Toda la salida será enviada a la salida estándar.

http://www.postgresql.org/docs/current/static/app-psql.html

Necesito ejecutar consultas postgresql desde la línea de comandos usando el comando psql -c. Para cada comando psql, abre una nueva conexión tcp para conectarse al servidor de la base de datos y ejecutar la consulta, que es una sobrecarga para una gran cantidad de consultas.

Actualmente puedo ejecutar una sola consulta como esta:

psql -U postgres -h <ip_addr> -c "SELECT * FROM xyz_table;"

Cuando intenté ejecutar varias consultas como se muestra a continuación, solo se ejecutó la última consulta.

psql -U postgres -h <ip_addr> -c "SELECT * FROM xyz_table; SELECT * FROM abc_table;"

¿Alguien puede ayudarme y decirme la forma correcta de hacerlo?


Usando echo y una tubería para ajustarlo en una sola línea:

echo ''SELECT * FROM xyz_table; /n SELECT * FROM abc_table'' | psql -U postgres


al menos desde 9.6.2 este enfoque funciona también:

psql -c "select now ()" -c "select version ()" -U postgres -h 127.0.0.1

ahora

2017-12-26 20: 25: 45.874935 + 01 (1 fila)

versión

PostgreSQL 9.6.2 en x86_64-pc-linux-gnu, compilado por gcc (Ubuntu 5.3.1-14ubuntu2) 5.3.1 20160413, 64-bit (1 fila)


-c procesa un solo comando. Sin embargo, sin él, psql espera que los comandos se pasen a la entrada estándar, por ejemplo:

psql -U postgres -h <ip_addr> <database_name> << EOF SELECT * FROM xyz_table; SELECT * FROM abc_table; EOF

O utilizando echo y tubos.