Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 24 September 2019 11:48

Sylther
Participant assidu
Lieu: Mpl
Date d'inscription: 17 May 2016
Messages: 189
Site web

Postgis : Code de retour d'une commande

Bonjour à toutes et tous,

Je travaille sur une base postgres en lançant des requêtes via un script shell qui ressemble à ceci :

Code:

#!/bin/bash
# -*- mode:shell-script; coding:utf-8; -*-

psql -h localhost -f maRequete.sql maBase user

if [ $? -eq 0 ] ; then
    echo "Ça marche"  | mailx  -s "Fin du traitement " xxx@xxxx.fr
else
    echo "Ça marche pas"   | mailx -A /home/xxxx/nohup.out -s "ERROR : Fin du traitement : $1" xxx@xxxx.fr

Mon problème est le suivant : même en cas d'échec de la requéte, le code de retour de psql semble être 0, ce que j'ai vérifié manuellement (ici un ST_union qui plante):

Code:

~$ psql -h localhost -f maRequete.sql maBase user
psql:landuse.sql:3: ERREUR:  GEOSUnaryUnion: TopologyException: Input geom 1 is invalid: Ring Self-intersection at or near point 618237.49999999965 6897087.5 at 618237.49999999965 6897087.5

~$ echo $?
0

Sauriez-vous comment connaître le véritable état de sortie de pgsql après une requête ? J'ai été voir ici, mais sans trouver mon bonheur.
Bref, je suis preneur de toute piste ! smile

Bonne journée,
S.

Hors ligne

 

#2 Tue 24 September 2019 12:34

tumasgiu
Membre
Lieu: Ajaccio
Date d'inscription: 5 Jul 2010
Messages: 1160

Re: Postgis : Code de retour d'une commande

Salut,

après un petit coup d'oeil au manuel de psql

Code:

man psql

Si votre script comporte plusieurs commandes distinctes,
psql les exécutera toutes mêmes si certaines échouent
et renverra toujours le code de retour 0,
sauf erreur fatale, genre division par zéro, auquel cas
psql s'arrête et le code de retour est 1.



Mais vous avez la possibilité de définir la variable psql ON_ERROR_STOP,
qui permet au script de s’arrêter à la première erreur rencontrée.
Quand cette variable est définie, le code de retour après exécution vaudra 3.

Code:

~$ psql --variable ON_ERROR_STOP=TRUE \
            -h localhost -f maRequete.sql maBase user
psql:landuse.sql:3: ERREUR:  GEOSUnaryUnion: TopologyException: Input geom 1 is invalid: Ring Self-intersection at or near point 618237.49999999965 6897087.5 at 618237.49999999965 6897087.5

~$ echo $?
3

Dernière modification par tumasgiu (Tue 24 September 2019 12:43)

Hors ligne

 

#3 Tue 24 September 2019 12:46

Sylther
Participant assidu
Lieu: Mpl
Date d'inscription: 17 May 2016
Messages: 189
Site web

Re: Postgis : Code de retour d'une commande

RTFM smile Man power smile

Je n'avais absolument pas pensé à cette démarche de base qui consiste à regarder le man.

Grand merci Tumasgiu !

Hors ligne

 

Pied de page des forums

Powered by FluxBB