Vous n'êtes pas identifié(e).

#1 26/10/2017 18:26:47

samirca007
Membre

signification du "pipe awk -F"

bonjour a tous

je débute en postgres et dans notre société on utilise ce petit script Shell pour faire l'opération du sauvegarde

psql -A -U postgres -t -c "\l"  |grep -v template |awk -F'|' '{print "pg_dump -c --port=5432 --username=postgres "$Ft"  > 

ce que j'arrive pas  a comprendre c'est la partie "pipe awk -F"

Qui a une idée a quoi sert ces options

merci

Hors ligne

#2 26/10/2017 18:38:46

rjuju
Administrateur

Re : signification du "pipe awk -F"

Le -F permet de spécifier le délimiteur de champ.


Vous pourriez réécrire le tout avec quelquechose du genre :

for d in $(psql -AXtc "SELECT datname FROM pg_database WHERE datname NOT like '%template%'" -U postgres); do
    echo "pg_dump of database $d..."
    pg_dump -c --port=5432 -U postgres $d > ...
done

Quelques petites remarques cependant :


- il serait plus intéressant de filtrer sur "WHERE NOT datistemplate" que sur "le nom de la base contient template", voire encore mieux "WHERE datallowconn" pour sauvegarder toutes les bases sur lesquelles on peut se connecter
- vous ne sauvegardez pas les objets globaux, ce qui est problématique (regardez pg_dumpall -g)
- vous ne testez à priori aucun code retour
- vous pourriez utiliser --no-password par sécurité
- les options de connexion ne sont pas cohérentes entre les deux appels (le port  est spécifié d'un coté et pas de l'autre)

Hors ligne

Pied de page des forums