PostgreSQL deaktiviert mehr Ausgabe


146

Ich führe ein Skript auf meinem PostgreSQL-Server aus:

psql db -f sql.sql

von bashoder in einem cronSkript.

Es wird immer wieder versucht, die Ausgabe mit moreoder zu paginieren less.

Wie deaktiviere ich die Ergebnispaginierung in psql?

Ich möchte nur die Daten ändern, mir ist keine Ausgabe wichtig.

Antworten:


244

Verwenden Sie: Deaktivieren Sie die Paginierung, behalten Sie jedoch die Ausgabe bei:

\pset pager off

Um sich diese Einstellung zu merken, fügen Sie sie Ihrem ~ / .psqlrc hinzu .

Siehe das psql-Handbuch .

Bei älteren Versionen von Pg war es also nur ein Umschalten \pset pager

Verwenden Sie \o /dev/nullin Ihrem psqlSkript , um die Ausgabe von Abfragen vollständig zu unterdrücken .

Um die psqlInformationsausgabe zu unterdrücken , führen Sie sie mit der Umgebung aus -qoder legen Sie sie fest QUIET=1.


Um Ergebnisse zu produzieren und sie wegzuwerfen können Sie umleiten stdoutzu /dev/nullmit:

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

Sie können sowohl stdout als auch stderr umleiten mit:

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

aber ich empfehle das nicht, da es Fehlerinformationen wegwirft, die Sie warnen könnten, dass etwas nicht richtig läuft. Sie produzieren auch Ergebnisse und werfen sie weg, was ineffizient ist. Sie sind besser dran, sie erst gar nicht zu produzieren, indem Sie Ihre Abfragen anpassen.


Das verhindert, dass ein Pager verwendet wird, aber die Ausgabe wird nicht gestoppt, oder? Ich vermute, Sie müssten PAGER="/dev/null" psql db -P pager=always -f sql.sqldafür sorgen, dass die Ausgabe immer beendet wird.
Harald Brinkhof

112

Ich habe auch danach gesucht und den Weg in einer ähnlichen Frage zu ServerFault gefunden:

psql -P pager=off <other params>

schaltet das Paging-Ding aus, ohne die Ausgabe zu unterdrücken.


4
Diese Antwort war hilfreicher als alles andere über -P in den Manpages. Vielen Dank!
Uhr

genau das brauche ich. Danke :)
Pradip Das

13

Hier ist eine weitere Option. Es hat den Vorteil, dass Sie sich keine psql-Optionsnamen usw. merken müssen.

psql ... | cat

absoluter protip! +1
sjas

11

Als Shell verfügt bash über zwei Streams, mit denen Sie diese Ausgabedaten umleiten können: stdout und stderr. Da diese Ausgabe irgendwo umgeleitet werden muss, verfügt Linux über einen bestimmten Knoten, der über / dev / null erreichbar ist . Alles, was Sie dorthin senden, verschwindet einfach in der Leere.

(Shells haben auch einen Eingabestream, aber ich werde dies hier ignorieren, da Sie darum gebeten haben, die Ausgabe zu unterdrücken.)

Diese Streams werden durch Zahlen dargestellt: 1 für stdout und 2 für stderr.

Wenn Sie also nur stdout umleiten möchten, tun Sie dies mit den Operatoren <und >(im Grunde genommen zeigen die Daten darauf, wohin sie fließen).

Angenommen, wir möchten stdout unterdrücken (umleiten nach / dev / null):

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

Wie Sie sehen, ist dies standardmäßig stdout. Es wurde keine Stream-Nummer verwendet, wenn Sie die Stream-Nummer verwenden möchten, die Sie schreiben möchten

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

Wenn Sie nun stderror (Stream Nummer 2) unterdrücken möchten, würden Sie verwenden

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

Sie können auch einen Stream zu einem anderen umleiten, z. B. stderror zu stdout. Dies ist nützlich, wenn Sie alle Ausgaben irgendwo speichern möchten, regulär und fehlerhaft.

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

wohlgemerkt kann es keine Leerzeichen dazwischen geben 2>&1

Schließlich und manchmal am interessantesten ist die Tatsache, dass Sie alle Ausgaben unterdrücken können, indem Sie verwenden &>, wenn Sie es "vollkommen leise" wollen.

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


1
Obwohl diese Informationen im Prinzip solide sind, funktionieren sie in diesem speziellen Fall überhaupt nicht, da psql die informativen Nachrichten nicht an stderr sendet. Sie sind mit Daten auf stdout vermischt.
Jonathan Hartley

Plötzlich wird mir klar, dass Ihr Punkt darin besteht, dass der OP den letzten '&>' Fall verwenden kann, um den Pager zu stoppen, indem alle Ausgaben unterdrückt werden. Ich werde meine Ablehnung entfernen, wenn Sie Ihre Antwort in irgendeiner Weise ändern.
Jonathan Hartley


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.