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.
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.