web-dev-qa-db-fra.com

Comment exécuter plusieurs requêtes en utilisant la commande psql à partir du shell bash?

J'ai besoin d'exécuter des requêtes postgresql à partir de la ligne de commande à l'aide de la commande psql -c. Pour chaque commande psql, il ouvre une nouvelle connexion tcp pour se connecter au serveur de base de données et exécuter la requête, ce qui représente une surcharge pour un grand nombre de requêtes.

Actuellement, je peux exécuter une seule requête comme celle-ci:

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

Lorsque j'ai essayé d'exécuter plusieurs requêtes comme ci-dessous, mais seule la dernière requête a été exécutée.

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

Quelqu'un peut-il m'aider et me dire comment le faire?

32
Pankaj Goyal

-c traite une seule commande. Sans cela cependant, psql s'attend à ce que les commandes soient passées à l'entrée standard, par exemple:

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

Ou en utilisant echo et des tuyaux.

54
keltar

En utilisant echo et un tuyau pour l'adapter sur une seule ligne:

echo 'SELECT * FROM xyz_table; \n SELECT * FROM abc_table' | psql -U postgres 
8
Salami

Le --file le paramètre exécute le contenu d'un fichier

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

Toute la sortie sera envoyée à la sortie standard

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

6
Clodoaldo Neto

au moins à partir de la version 9.6.2, cette approche fonctionne également:

psql -c "sélectionner maintenant ()" -c "sélectionner la version ()" -U postgres -h 127.0.0.1

à présent

2017-12-26 20: 25: 45.874935 + 01 (1 rangée)

version

PostgreSQL 9.6.2 sur x86_64-pc-linux-gnu, compilé par gcc (Ubuntu 5.3.1-14ubuntu2) 5.3.1 20160413, 64 bits (1 ligne)

5
Cyril Damm