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 :
D'où le if multiple pour empêcher la sauvegarde des fausses bases "datname", "-----------" et des vraies bases "template0", "template1" et "test".datname
-----------
postgres
template1
template0
test
icescrum
(5 lignes)
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 ?
Partager