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