DATE=$(date +%Y-%m-%d)
TIME=$(date +%T)
rm -f /var/lib/postgresql/diff_ann.ok
rm -f /var/lib/postgresql/1131422.xml
rm -f /var/lib/postgresql/1131422.zip
psql << EOF
select diff_annonces(1,1,1000);
copy (select id_envoi from diffusion_envoi where dat_envoi is null order by id_envoi limit 1) to '/var/lib/postgresql/diff_ann.ok';
EOF
id=`head -1 /var/lib/postgresql/diff_ann.ok`
if [ -z "$id" ]
then
echo "Aucun fichier à envoyer"
else
echo "Traitement envoi $id"
psql << EOF
copy (select fichier_contenu from diffusion_envoi where id_envoi = $id) to '/var/lib/postgresql/1131422.xml' csv;
update diffusion_envoi set dat_envoi='$DATE $TIME' WHERE id_envoi = $id;
EOF
sed --in-place -e 's/\"\"/\"/g' 1131422.xml
sed --in-place -e 's/\"<?xml/<?xml/g' 1131422.xml
sed --in-place -e 's/"$//g' 1131422.xml
zip -r 1131422.zip 1131422.xml
ftp -in <<THEEND
open xxxx
user xxx xxx
put 1131422.zip
close
bye
THEEND
msg=" $DATE $TIME Envoi no. $id effectué"
echo $msg | mail -s "Multi-diffusion" -t xxx@xx.fr -t -a From:no-reply@xx.xx
fi
diff_annonces est une fonction pl/PgSQL . Le shell est lancé dans le cron .
Alex
]]>psql $dbname $dbuser -c 'select mafonction()'
dans mon shell linux ?
Si oui, comment récupérer mon return code ?
]]>en gros
#/bin/sh
# mon traitement
mois=$1
annee=$2
exec proc1($1,$2)
if $? = 0 on continue ..
else
exit ..
exec proc2($1,$2)
if $? = 0 on continue ..
else
exit
etc etc ..
mais d'une part, je ne sais pas comment lancer les batch postgres , ni comment récupérer le return code pour savoir si la procedure s'est bien passée ..
]]>Je me heurte déjà beaucoup aux problèmes d'organisation entre oracle et postgres .. mais je poserai mes questions dans un autre topic ..
Ma présente question est la suivante :
comment mettre en œuvre de tels appels à des fonctions .. en gros, à quoi ressemblerait un shell linux appelant des fonctions stockées dans postgres ? Comment tester les codes retour postgres ( erreur sur un "batch" postgres ) ?
Je recherche sur le web mais ne trouve rien de très complet ..
Si vous avez un début de réponse ou même un shell type qui puisse me servir de base de départ, je suis preneur.
Merci
]]>