Bonjour,

J'ai un script de sauvegarde de mes BDD PostgreSQL et MariaDB qui est lancé chaque soir par un cron. Voici l'extrait concernant la partie PostgreSQL :
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
echo "*** ************************* ***" >> $LOG_FILE
echo "*** SAUVEGARDE BDD POSTGRESQL ***" >> $LOG_FILE
echo "*** ************************* ***" >> $LOG_FILE
echo "" >> $LOG_FILE
 
echo "*** LISTE DES BDD PostgreSQL à SAUVEGARDER ***" >> $LOG_FILE
BASES=`psql -U postgres -w -c "SELECT datname FROM pg_database;" 2> /dev/null`
 
if [ -z "$BASES" ];then
        echo "Erreur d'accès ou pas de bases" >> $LOG_FILE
        exit 1
fi
echo -e $BASES  >> $LOG_FILE
echo "" >> $LOG_FILE
 
echo "*** SAUVEGARDES ***" >> $LOG_FILE
for BASE in $BASES
do
	if [ $BASE != "datname" ] && [ $BASE != "-----------" ] && [ $BASE != "template0" ] && [ $BASE != "template1" ] && [ $BASE != "test" ]; then
		echo "- BDD $BASE" >> $LOG_FILE
		pg_dump -U postgres -w $BASE --compress=1 -f $BACKUP_PATH/dump_"$BASE"_$datecourte.sql.gz
	fi
done
echo "" >> $LOG_FILE

Le problème est que la commande psql -U postgres -w -c "SELECT datname FROM pg_database;" 2> /dev/null donne ce résultat :
datname
-----------
postgres
template1
template0
test
icescrum
(5 lignes)
D'où le if multiple pour empêcher la sauvegarde des fausses bases "datname", "-----------" et des vraies bases "template0", "template1" et "test".
Mais j'ai des erreurs dans le log sur la dernière ligne du résultat : "(5 lignes)" qui se divise dans le script entre les fausses bases "(5" et "lignes)".
Je ne peux pas ajouter deux cas supplémentaires au if car le jour où j'ajouterai une BDD, ça deviendra "(6 lignes)" et je devrai changer mon script, ce qui n'est pas très pratique.

Y a t-il un moyen pour n'obtenir que la liste des BDD sans l'entête de colonne résultat et le nombre de lignes, comme c'est le cas dans la partie MariaDB qui est faite sur le même principe ?