PostgreSQL désactive plus de sortie


146

J'exécute un script sur mon serveur PostgreSQL:

psql db -f sql.sql

depuis bashou dans un cronscript.

Il essaie de paginer la sortie avec moreou less.

Comment désactiver la pagination des résultats dans psql?

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

Réponses:


244

Pour désactiver la pagination mais conserver la sortie, utilisez:

\pset pager off

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

Consultez le manuel psql .

Sur les anciennes versions de Pg, ce n'était qu'une bascule, donc \pset pager

Pour supprimer complètement la sortie de la requête, utilisez \o /dev/nulldans votre psqlscript.

Pour supprimer psqlla sortie d'information de, exécutez-la avec -qou définie QUIET=1dans l'environnement.


Pour produire des résultats et les jeter, vous pouvez vous rediriger stdoutvers /dev/nullavec:

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

Vous pouvez rediriger à la fois stdout et stderr avec:

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

mais je ne le recommande pas, car cela rejettera les informations d'erreur qui pourraient vous avertir que quelque chose ne va pas. Vous produisez également des résultats et vous les jetez, ce qui est inefficace; vous feriez mieux de ne pas les produire en premier lieu en ajustant vos requêtes.


Cela l'empêche d'utiliser un pager mais cela n'arrête pas la sortie, non? Je suppose que vous devez PAGER="/dev/null" psql db -P pager=always -f sql.sqltoujours le faire tuer la sortie.
Harald Brinkhof

112

Je cherchais cela aussi, j'ai trouvé le chemin dans une question similaire sur ServerFault:

psql -P pager=off <other params>

désactive la chose de pagination, sans supprimer la sortie.


4
Cette réponse a été plus utile que tout ce qui concerne -P dans les pages de manuel. Merci!
nortally

c'est exactement ce dont j'ai besoin. Merci :)
Pradip Das

13

Voici une autre option. Cela présente l'avantage que vous n'avez pas à vous souvenir des noms d'options psql, etc.

psql ... | cat

protip absolu! +1
sjas

11

bash, étant un shell , a 2 flux que vous pouvez rediriger 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 également un flux d'entrée mais je vais l'ignorer ici puisque vous avez demandé la suppression de la sortie)

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

Donc, si vous voulez rediriger juste stdout, vous le feriez avec les opérateurs <et >(essentiellement là où il pointe, c'est vers où les données circulent)

supposons que nous voulions supprimer stdout (rediriger 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 flux n'a été utilisé si vous vouliez utiliser le numéro de flux que vous écririez

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

Maintenant, si vous souhaitez supprimer stderror (flux numéro 2), vous utilisez

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

Vous pouvez également rediriger un flux vers un autre, par exemple stderror vers stdout, ce qui est utile si vous souhaitez enregistrer toute la sortie quelque part, régulière et erreurs.

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

attention, il ne peut pas 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 &>, pour quand vous le voulez 'parfaitement silencieux'

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


1
Bien que cette information soit valable en principe, elle ne fonctionne pas du tout dans ce cas précis, car psql n'envoie pas les messages informatifs à stderr. Ils sont entremêlés avec des données sur stdout.
Jonathan Hartley

Soudain, je me rends compte que votre point est que le cas final '&>' peut être utilisé par l'OP pour arrêter le téléavertisseur, en supprimant toute sortie. Je retirerai mon vote défavorable si vous modifiez votre réponse de quelque manière que ce soit.
Jonathan Hartley


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.