Alternatives Ausgabeformat für psql

313

Ich verwende PostgreSQL 8.4 unter Ubuntu. Ich habe eine Tabelle mit Spalten c1durch cN. Die Spalten sind breit genug, sodass durch Auswahl aller Spalten eine Reihe von Abfrageergebnissen mehrmals umbrochen wird. Folglich ist die Ausgabe schwer zu lesen.

Wenn die Abfrageergebnisse nur wenige Zeilen umfassen, wäre es praktisch, wenn ich die Abfrageergebnisse so anzeigen könnte, dass sich jede Spalte jeder Zeile in einer separaten Zeile befindet, z

 c1: <value of row 1's c1>
 c2: <value of row 1's c1>
 ...
 cN: <value of row 1's cN>
 ---- some kind of delimiter ----
 c1: <value of row 2's c1>
 etc.

Ich führe diese Abfragen auf einem Server aus, auf dem ich keine zusätzliche Software installieren möchte. Gibt es eine psql-Einstellung, mit der ich so etwas machen kann?

user100464
quelle

Antworten:

529

Ich musste nur mehr Zeit damit verbringen, auf die Dokumentation zu starren. Dieser Befehl:

\x on

werde genau das tun, was ich wollte. Hier ist eine Beispielausgabe:

select * from dda where u_id=24 and dda_is_deleted='f';
-[ RECORD 1 ]------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dda_id             | 1121
u_id               | 24
ab_id              | 10304
dda_type           | CHECKING
dda_status         | PENDING_VERIFICATION
dda_is_deleted     | f
dda_verify_op_id   | 44938
version            | 2
created            | 2012-03-06 21:37:50.585845
modified           | 2012-03-06 21:37:50.593425
c_id               | 
dda_nickname       | 
dda_account_name   | 
cu_id              | 1
abd_id             | 
user100464
quelle
8
Sie können auch versuchen, das Format \ pset zu verpacken (zulässige Formate sind nicht ausgerichtet, ausgerichtet, verpackt, HTML, Latex, troff-ms). Wenn die Anzeige schmal genug ist, wird jede Spalte mit einem Zeilenumbruch versehen.
Bryce
12
\xAllein wird der Wert umgeschaltet und Sie sparen drei Tastenanschläge! (Nützlich, wenn Sie schnell zwischen breiten und schmalen Ausgängen wechseln).
Msanford
7
Wenn Sie nach einem Äquivalent zu \GMySQL suchen, versuchen Sie, es \x\g\xan das Ende der Abfrage anzuhängen oder eine Verknüpfung beim ~/.psqlrcHinzufügen zu definieren \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0', und verwenden Sie es dann am Ende :G. (Beachten Sie das Fehlen von Semikolons)
Sławomir Lenart
5
Ist es möglich, irgendwie " \x on" oder das Äquivalent an der Kommandozeile zu übergeben? Es wäre schön, wenn ich nur speichern könnte (zum Beispiel mithilfe eines Bash-Shell-Alias), psql --somethingdamit ich die Option immer standardmäßig aktiviert habe.
Machineghost
2
@machineghost Verwenden Sie -P expanded=autooder--pset expanded=auto
alecdwm
269

(Neu) Erweiterter Auto-Modus: \ x Auto

Neu für Postgresql 9.2; PSQL passt Datensätze automatisch an die Bildschirmbreite an. Bisher hatten Sie nur den erweiterten Modus ein- oder ausgeschaltet und mussten bei Bedarf zwischen den Modi wechseln.

  • Wenn der Datensatz in die Breite des Bildschirms passt; psql verwendet die normale Formatierung.
  • Wenn der Datensatz nicht in die Bildschirmbreite passt; psql verwendet den erweiterten Modus.

Um dies zu erhalten, verwenden Sie: \ x auto

Postgresql 9.5 Dokumentation zum PSQL-Befehl.


Breitbild, normale Formatierung:

 id | time  |       humanize_time             | value 
----+-------+---------------------------------+-------
  1 | 09:30 |  Early Morning - (9.30 am)      |   570
  2 | 11:30 |  Late Morning - (11.30 am)      |   690
  3 | 13:30 |  Early Afternoon - (1.30pm)     |   810
  4 | 15:30 |  Late Afternoon - (3.30 pm)     |   930
(4 rows)

Schmaler Bildschirm, erweiterte Formatierung:

-[ RECORD 1 ]-+---------------------------
id            | 1
time          | 09:30
humanize_time | Early Morning - (9.30 am)
value         | 570
-[ RECORD 2 ]-+---------------------------
id            | 2
time          | 11:30
humanize_time | Late Morning - (11.30 am)
value         | 690
-[ RECORD 3 ]-+---------------------------
id            | 3
time          | 13:30
humanize_time | Early Afternoon - (1.30pm)
value         | 810
-[ RECORD 4 ]-+---------------------------
id            | 4
time          | 15:30
humanize_time | Late Afternoon - (3.30 pm)
value         | 930

Wie starte ich psql mit \ x auto?

Konfigurieren Sie den \x autoBefehl beim Start, indem Sie ihn .psqlrcin Ihrem Home-Ordner hinzufügen und psql neu starten. Weitere Informationen finden Sie im Abschnitt "Dateien" im psql-Dokument .

~ / .psqlrc

\x auto
notapatch
quelle
69

Sie haben so viele Möglichkeiten, wie könnten Sie verwirrt sein :-)? Die Hauptsteuerelemente sind:

# \pset format
# \H
# \x
# \pset pager off

Jeder hat Optionen und Interaktionen mit den anderen. Die automatischsten Optionen sind:

# \x off;\pset format wrapped
# \x auto

Die neuere Option "\ x auto" wechselt nur "bei Bedarf" zur zeilenweisen Anzeige.

-[ RECORD 1 ]---------------
id          | 6
description | This is a gallery of oilve oil brands.
authority   | I love olive oil, and wanted to create a place for
reviews and comments on various types.
-[ RECORD 2 ]---------------
id          | 19
description | XXX Test A 
authority   | Testing

Das ältere "verpackte \ pset-Format" ist insofern ähnlich, als es versucht, die Daten ordentlich auf dem Bildschirm anzupassen, aber auf nicht ausgerichtet zurückgreift, wenn die Überschriften nicht passen. Hier ist ein Beispiel für verpackt:

 id |          description           |            authority            
----+--------------------------------+---------------------------------
  6 | This is a gallery of oilve     | I love olive oil, and wanted to
    ; oil brands.                    ;  create a place for reviews and
    ;                                ;  comments on various types.
 19 | Test Test A                    | Testing
Bryce
quelle
\x automit \pset pager offist eine schöne.
Mitnk
Sind \x off; \pset format wrappedund \x autosollen sie zusammen verwendet werden oder schließen sie sich gegenseitig aus?
Demitri
20

Eine interessante Sache ist, dass wir die Tische horizontal betrachten können, ohne sie zu falten. Wir können PAGERUmgebungsvariablen verwenden. psql macht davon Gebrauch. Sie können einstellen

export PAGER='/usr/bin/less -S'

oder nur, less -Swenn es bereits in der Befehlszeile verfügbar ist, wenn nicht an der richtigen Stelle. -S, um ungefaltete Linien anzuzeigen. Sie können damit jeden benutzerdefinierten Viewer oder andere Optionen übergeben.

Ich habe mehr in Psql Horizontal Display geschrieben

Dineshkumar
quelle
1
Die Antwort ist wirklich gut. Ich bin überrascht, dass es nicht höher markiert ist. Perfekt für alle, die in einem Terminal arbeiten.
Benutzer
Dies war sehr hilfreich
Merlin
Dies ist nützlich, aber wie scrollen Sie nach rechts?
Niel de Wet
18

pspg ist ein einfaches Tool, das erweiterte Tabellenformatierung, horizontales Scrollen, Suchen und viele weitere Funktionen bietet.

git clone https://github.com/okbob/pspg.git
cd pspg
./configure
make
make install

Stellen Sie dann sicher, dass Sie die PAGERVariable aktualisieren , z~/.bashrc

export PAGER="pspg -s 6" 

wo -ssteht für Farbschema ( 1-14). Wenn Sie pgdg-Repositorys verwenden , installieren Sie einfach ein Paket (in einer Debian-ähnlichen Distribution):

sudo apt install pspg

pspg Beispiel

Tombart
quelle
7

Schauen Sie sich auch \ H an, um die HTML-Ausgabe ein- und auszuschalten. Nicht unbedingt einfach an der Konsole zu lesen, aber interessant zum Speichern in eine Datei (siehe \ o) oder zum Einfügen in ein Editor- / Browserfenster zum Anzeigen, insbesondere bei mehreren Zeilen mit relativ komplexen Daten.

Wexxor
quelle
1

Sie können die Zenität verwenden, um die Abfrageausgabe als HTML-Tabelle anzuzeigen .

  • Implementieren Sie zuerst das Bash-Skript mit folgendem Code:

    cat> '/tmp/sql.op'; zenity --text-info --html --filename = '/ tmp / sql.op';

    Speichern Sie es wie mypager.sh

  • Exportieren Sie dann die Umgebungsvariable PAGER, indem Sie den vollständigen Pfad des Skripts als Wert festlegen.

    Zum Beispiel: - export PAGER = '/ path / mypager.sh'

  • Melden Sie sich dann beim psql-Programm an und führen Sie den Befehl \ H aus

  • Wenn Sie eine Abfrage ausführen, wird die angegebene Ausgabe im HTML-Tabellenformat im Zenity angezeigt.

Purushothaman Poovai
quelle