#1 Le 21/10/2008, à 14:20
- Tornado
[RESOLU]Requete SQL et Shell script
Bonjour à tous,
Je dois interroger une base de données PostgreSQL dans un script Shell, pour cela, j'utilise la commande "psql" qui fonctionne très bien.
Voilà un extrait de mon script :
for machine in `psql -U postgres -h $main_server -d cp2 -t -c "SELECT id_machine,nb_traitement,ip,work_dir FROM work_machine WHERE work_type LIKE '%parse%' ORDER BY priority"` ; do
echo $machine
done
Je souhaiterai, pour chaque ligne renvoyée par la requête, traiter les données de chaque champ. Le problème, c'est que le script ci-dessus me renvoie toutes les lignes en même temps dans la variable $machine, et donc impossible de faire un traitement ligne par ligne.
Merci par avance de m'aider à comprende ce qu'il se passe,
Dernière modification par Tornado (Le 21/10/2008, à 16:38)
Hors ligne
#2 Le 21/10/2008, à 15:11
- alexduf
Re : [RESOLU]Requete SQL et Shell script
Bonjour,
tu peux utiliser la commande read qui t'éclateras ton résultat dans des variables. Cela sous-entend que tes résultats ne ramènent pas d'espaces.
REQUETE="SELECT id_machine,nb_traitement,ip,work_dir FROM work_machine WHERE work_type LIKE '%parse%' ORDER BY priority"
psql -U postgres -h $main_server -d cp2 -t -c "$REQUETE" | while read ID_MACHINE NB_TRAITEMENT IP DIR
do
echo $ID_MACHINE
echo $NB_TRAITEMENT
echo $IP
echo $DIR
done
Cela devrait fonctionner mais demande à être testé.
A+
Dernière modification par alexduf (Le 21/10/2008, à 15:12)
Hors ligne
#3 Le 21/10/2008, à 16:04
- Tornado
Re : [RESOLU]Requete SQL et Shell script
Merci Alexduf pour ta contribution
Je viens de tester, et comme tu l'avais signalé, j'obtiens des choses bizarres car le résultat de la requête comporte des espaces
voilà à quoi ressemble une ligne renvoyées par la requête :
1 | 2 | 127.0.0.1 | /home/oba/CP2/worker_machine
J'ai donc plusieurs espaces dans l'ensemble des champs.
Y a t il un truc à ajouter pour réussir à isoler les valeurs de mes champs dans des variables ?
Hors ligne
#4 Le 21/10/2008, à 16:08
- Tornado
Re : [RESOLU]Requete SQL et Shell script
j'ai testé en rajoutant :
while read ID_MACHINE PIPE1 NB_TRAITEMENT PIPE2 IP PIPE3 DIR
J'obtiens bien mes variables de manière isolée. Mais bon,... j'en ai la nausée tellement c'est pas propre ^^
Une idée pour optimiser tout cela ?
Hors ligne
#5 Le 21/10/2008, à 16:19
- Totor
Re : [RESOLU]Requete SQL et Shell script
Salut,
tu peux récupérer ligne par ligne et ensuite extraire manuellement chacun des champs :
REQUETE="SELECT id_machine,nb_traitement,ip,work_dir FROM work_machine WHERE work_type LIKE '%parse%' ORDER BY priority"
psql -U postgres -h $main_server -d cp2 -t -c "$REQUETE" | while read RESULTAT
do
ID_MACHINE=$(echo "${RESULTAT}"|awk -F\| '{ print $1 }')
NB_TRAITEMENT=$(echo "${RESULTAT}"awk -F\| '{ print $2 }')
IP=$(echo "${RESULTAT}"awk -F\| '{ print $3 }')
DIR=$(echo "${RESULTAT}"awk -F\| '{ print $4 }')
done
c'est comme tu préfères...
-- Lucid Lynx --
Hors ligne
#6 Le 21/10/2008, à 16:38
- Tornado
Re : [RESOLU]Requete SQL et Shell script
En effet ! Cela fonctionne aussi !
Merci à vous deux pour votre aide
Je clos le topic
Hors ligne