So deaktivieren Sie den Header nur in psql (postgresql)

17

Ich verwende PostgreSQL 9.1.X

Ich versuche, ein psqlSkript zu erstellen , um Ergebnisse ohne Kopfzeile, aber mit Fußzeile zu drucken.

http://www.postgresql.org/docs/9.1/static/app-psql.html

Aus dem obigen Dokument

\pset tuples_only

schaltet sowohl die Kopf- als auch die Fußzeile aus. und

\pset footer off

Schaltet nur die Fußzeile aus.

Gibt es eine Möglichkeit psql, die Kopfzeile auszuschalten und die Fußzeile aktiviert zu lassen?

Ich weiß, dass es viele Möglichkeiten gibt, um dieses Problem mit Shell / Perl / einem beliebigen Textwerkzeug zu umgehen. Ich frage mich jedoch, warum es eine Konfiguration für die Fußzeile gibt, aber keine für die Kopfzeile?

id <--this line I don't want
---- <-- this line I don't want either
 1  <-- this line, yes
(1 row) <-- yes, I want it!
Skong
quelle
Bist du unter Unix? Wenn ja, können Sie head / tail / grep / awk / sed / eine Million andere Dinge verwenden
Philᵀᴹ

Antworten:

9

Wenn Sie psqlvon der Shell aus ausführen , können Sie die -tOption (druckt nur Tupel) verwenden:

$ psql -t -c "SELECT version();"
 PostgreSQL 9.5.5 on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit

Im psqlGebrauch \tauszuschalten Zählung Druck Kopf- und Zeile.

Tombart
quelle
7

Meine Lösung ist nicht ganz auszuschalten, sondern Header zu verwerfen.

Sie können versuchen, taildie Abfrage auszugeben:

\o | tail -n +2

Mit \okönnen Sie die Ausgabe in eine Datei oder eine Pipe umleiten, wie in diesem Fall. Auch diese Lösung hat einen Fehler: Zumindest in meinem Fall SELECT [...]komme ich nach der Ausführung von nicht zu einer Eingabeaufforderung zurück, es sei denn, ich drücke eine Taste. Nach einer Eingabeaufforderung wird die erste Ausgabezeile angezeigt. Wenn Sie dann die Ausgabe in eine Datei umleiten, sollte dies jedoch kein Problem sein.

Dieses Verhalten kann vermieden werden, wenn Sie die PAGERUmgebungsvariable entsprechend festlegen und immer den folgenden Pager verwenden psql:

$ export PAGER='tail -n +3'

$ psql -U postgres -d test
psql (9.1.4, server 9.1.5)

test=# \pset pager always
Pager is always used.

test=# select * from a;
  2 | b
  3 | b
(2 rows)

In der psqlVersion, die mit PostgreSQL 9.2 geliefert wird, können Sie den \setenvBefehl zur Vereinfachung verwenden (ich meine, Sie müssen keine env-Variable festlegen, die sich auch auf andere Anwendungen auswirken kann).

dezso
quelle
Netter Hack, gut zu wissen, Pager-Option. Aber gibt es wirklich keine Option für den Header selbst? Vielleicht sollte ich Postgresqls Mailist überprüfen
Skong
@sinbadblue Nein. Wie Sie bereits überprüft haben, nein. Sie können jedoch eine Funktionsanfrage stellen :) Wäre eine nützliche Verbesserung.
Dezso
5

Sie müssen eine psql-Befehlszeilenoption hinzufügen -P "footer=off". Diese Option behält die Spaltentitel im Ergebnis.

Karen Muñoz
quelle
Lies die Frage.
Colin 't Hart