PostgreSQL désactive plus de sortie

Je lance un script sur mon serveur PostgreSQL:

psql db -f sql.sql 

de bash ou dans un script cron .

Il continue d’essayer de paginer le résultat avec more ou less .

Comment puis-je désactiver la pagination de résultat dans psql ?

Tout ce que je veux faire, c’est changer les données, je ne me soucie d’aucune sortie.

Pour désactiver la pagination mais conserver le résultat, utilisez:

 \pset pager off 

Pour vous souvenir de ce paramètre, ajoutez-le à votre fichier ~ / .psqlrc .

Voir le manuel psql .

Sur les anciennes versions de Pg, c’était juste une bascule, donc \pset pager

Pour supprimer complètement la sortie de la requête, utilisez \o /dev/null dans votre script psql .

Pour supprimer la sortie d’information de psql , exécutez-la avec -q ou définissez QUIET=1 dans l’environnement.


Pour produire des résultats et les jeter, vous pouvez redirect stdout vers /dev/null avec:

 psql db -f sql.sql >/dev/null 

Vous pouvez redirect à la fois stdout et stderr avec:

 psql db -f sql.sql >&/dev/null 

mais je ne le recommande pas, car cela jettera des informations d’erreur qui pourraient vous avertir que quelque chose ne va pas. Vous produisez également des résultats et les rejetez, ce qui est inefficace. il est préférable de ne pas les produire en premier lieu en ajustant vos requêtes.

Je cherchais cela aussi, j’ai trouvé la voie dans une question similaire sur ServerFault:

 psql -P pager=off  

désactive la fonction de pagination sans supprimer la sortie.

bash, étant un shell , a 2 stream que vous pouvez redirect pour ces données de sortie: stdout et stderr, car cette sortie doit être redirigée quelque part, linux a un nœud spécifique «tout supprimer» accessible via / dev / null . Tout ce que vous envoyez là-bas disparaîtra dans le vide.

(les shells ont aussi un stream d’entrée mais je vais ignorer ceci ici puisque vous avez demandé de supprimer la sortie)

Ces stream sont représentés par des nombres: 1 pour stdout et 2 pour stderr.

Donc, si vous voulez redirect simplement stdout, vous le feriez avec les opérateurs < et > (où il pointe vers les données)

supposons que nous voulions supprimer stdout (redirect vers / dev / null):

psql db -f sql.sql > /dev/null

Comme vous pouvez le voir, stdout est la valeur par défaut, aucun numéro de stream n'a été utilisé si vous souhaitez utiliser le numéro de stream que vous écrivez

psql db -f sql.sql 1> /dev/null

Maintenant, si vous voulez supprimer stderror (stream numéro 2), vous utiliseriez

psql db -f sql.sql 2> /dev/null

Vous pouvez également redirect un stream vers un autre, par exemple stderror vers stdout, ce qui est utile si vous souhaitez enregistrer toutes les sorties quelque part, régulièrement et avec des erreurs.

psql db -f sql.sql 2>&1 > log.txt

attention, il ne peut y avoir d’espaces entre 2>&1

Enfin, et parfois, le plus intéressant est le fait que vous pouvez supprimer toutes les sorties en utilisant &> , lorsque vous le souhaitez «parfaitement silencieux».

psql db -f sql.sql &> /dev/null

 psql db -f sql.sql > /dev/null 

Voici une autre option. Il a l’avantage de ne pas avoir à retenir les noms des options psql, etc.

 psql ... | cat