2012-06-24 9 views
89

ich ein Skript auf meinem PostgreSQL Server leite:PostgreSQL deaktivieren mehr Leistung

psql db -f sql.sql 

von bash oder in einem cron Skript.

Es wird versucht, den Ausgang mit more oder less zu paginieren.

Wie deaktiviere ich die Ergebnispaginierung in psql?

Alles, was ich tun möchte, ist die Daten zu ändern, ich kümmere mich nicht um irgendeine Ausgabe.

Antwort

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

bash, ein shell ist, verfügt über 2 streams Sie, dass die Ausgangsdaten umleiten: stdout und stderr, da dieser Ausgang irgendwo umgeleitet werden muss, Linux hat einen bestimmten Knoten erreichbar durch /dev/null 'alles wegwerfen. Alles, was du dorthin schickst, wird einfach in der Leere verschwinden.

(Schalen auch einen Eingangsstrom, aber ich werde das hier ignorieren, da Sie zur Unterdrückung der Ausgabe gefragt)

Diese Ströme durch Zahlen dargestellt werden: 1 für stdout und 2 für stderr.

Also, wenn Sie nur umleiten möchten stdout würden Sie tun, dass mit den < und > Operatoren (im Grunde, wo er zeigt, wo die Daten fließt)

nehmen wir an stdout zu unterdrücken wollen (Umleitung auf/dev/null):

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

Wie Sie sehen, ist dies stdout Standard ist, kein Strom Nummer verwendet, wenn Sie die Strom-Nummer verwenden wollte würden Sie schreiben

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

Nun, wenn Sie stderror (Strom-Nummer 2) zu unterdrücken wollen, dann würden Sie verwenden

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

Sie auch einen Stream auf eine andere umleiten könnte zum Beispiel stderror auf stdout, das ist nützlich, wenn Sie alle Ausgaben irgendwo, regelmäßig und Fehler speichern möchten.

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

Geist Sie können es nicht sein Räume zwischen 2>&1

Schließlich und manchmal besonders interessant ist die Tatsache, dass Sie die gesamte Ausgabe &> durch die Verwendung unterdrücken kann, denn wenn Sie es wollen ‚vollkommen ruhig‘

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

+1

Während diese Informationen grundsätzlich Sound ist, es gar nicht arbeiten in diesem speziellen Fall, weil psql nicht schickt die informativen Nachrichten an stderr. Sie sind mit Daten auf stdout vermischt. –

+0

Plötzlich merke ich, dass Ihr Punkt ist, dass der letzte '&' 'Fall vom OP verwendet werden kann, um den Pager zu stoppen, indem die gesamte Ausgabe unterdrückt wird. Ich werde meinen Downvote entfernen, wenn Sie Ihre Antwort in irgendeiner Weise ändern. –

153

Paginierung zu deaktivieren, aber behalten die Ausgabe, Verwendung:

\pset pager off 

diese Einstellung zu erinnern, fügen Sie sie ~/.psqlrc.

Siehe the psql manual.

Bei älteren Versionen von Pg es war nur ein Knebel, so \pset pager

Um vollständig zu unterdrücken Abfrageausgabe, \o /dev/null in Ihrem psql Skript verwenden.

Um die Informationsausgabe psql zu unterdrücken, führen Sie sie mit -q oder setzen Sie QUIET=1 in der Umgebung.


Um Ergebnisse zu produzieren und sie wegzuwerfen Sie stdout-/dev/null mit umleiten:

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

Sie können sowohl stdout und stderr mit Umleitung:

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

aber ich weiß nicht empfehle das, da es Fehlerinformationen wegwirft, die dich warnen könnten, dass etwas nicht richtig geht. Sie produzieren auch Ergebnisse und werfen sie weg, was ineffizient ist; Sie sind besser dran, wenn Sie sie nicht zuerst anfertigen, indem Sie Ihre Abfragen anpassen.

+0

Das hält es davon ab, einen Pager zu benutzen, aber es stoppt nicht die Ausgabe, nein? Ich nehme an, Sie würden 'PAGER ="/dev/null "psql db -P pager = immer -f sql.sql 'benötigen, damit es die Ausgabe immer beendet. –

+2

Nein, use \ o/dev/null –

67

Ich war für diese zu suchen, fand ich die Art und Weise in einem similar question auf ServerFault:

psql -P pager=off <other params> 

das Paging-Ding schaltet sich aus, ohne Ausgang zu unterdrücken.

+1

Diese Antwort war hilfreicher als alles andere in den man-Seiten. Vielen Dank! – nortally

+0

das ist was ich genau brauche.Danke :) –

1

Hier ist eine weitere Option. Es hat den Vorteil, dass Sie müssen nicht psql Option Namen erinnern, usw.

psql ... | cat 
+0

absolute protip! +1 – sjas

Verwandte Themen