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?
-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.
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
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
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
2017-12-26 20: 25: 45.874935 + 01 (1 rangée)
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)