Formato di output alternativo per psql


316

Sto usando PostgreSQL 8.4 su Ubuntu. Ho una tabella con le colonne c1attraverso cN. Le colonne sono abbastanza larghe che la selezione di tutte le colonne provoca il ritorno a capo di una riga di risultati della query più volte. Di conseguenza, l'output è difficile da leggere.

Quando i risultati della query costituiscono solo poche righe, sarebbe utile poter visualizzare i risultati della query in modo tale che ciascuna colonna di ciascuna riga si trovi su una riga separata, ad es.

 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.

Sto eseguendo queste query su un server in cui preferirei non installare alcun software aggiuntivo. C'è un'impostazione psql che mi permetterà di fare qualcosa del genere?

Risposte:


532

Avevo solo bisogno di passare più tempo a guardare la documentazione. Questo comando:

\x on

farà esattamente quello che volevo. Ecco alcuni esempi di output:

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             | 

8
Puoi anche provare \ pset format wrapped (i formati consentiti sono non allineati, allineati, chiusi, html, latex, troff-ms). Se il display è abbastanza stretto, avvolgerà le parole in ciascuna colonna.
Bryce,

12
\xda solo attiva / disattiva il valore, risparmiando tre sequenze di tasti! (Utile quando si passa rapidamente tra uscite ampie e strette).
msanford,

7
Se stai cercando un equivalente a \Gda Mysql, prova ad aggiungere \x\g\xalla fine della query o definisci il collegamento in ~/.psqlrcaggiunta \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0', quindi usa alla fine :G. (nota la mancanza di punti e virgola)
Sławomir Lenart,

5
È possibile in qualche modo passare " \x on" o l'equivalente dalla riga di comando? Sarebbe bello se potessi semplicemente salvare (ad esempio, usando un alias di shell bash) in psql --somethingmodo da avere sempre l'opzione attivata per impostazione predefinita.
machineghost

2
@machineghost Use -P expanded=autooppure--pset expanded=auto
alecdwm

269

(Novità) Modalità automatica estesa: \ x auto

Novità per Postgresql 9.2; PSQL adatta automaticamente i record alla larghezza dello schermo. in precedenza avevi attivato o disattivato la modalità estesa e dovevi passare da una modalità all'altra, se necessario.

  • Se il record può adattarsi alla larghezza dello schermo; psql utilizza una formattazione normale.
  • Se il record non può adattarsi alla larghezza dello schermo; psql utilizza la modalità estesa.

Per ottenere questo uso: \ x auto

Postgresql 9.5 Documentazione sul comando PSQL.


Schermo largo, formattazione normale:

 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)

Schermo stretto, formattazione estesa:

-[ 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

Come avviare psql con \ x auto?

Configura il \x autocomando all'avvio aggiungendolo a .psqlrcnella tua cartella home e riavviando psql. Cerca nella sezione "File" nel documento psql per maggiori informazioni .

~ / .Psqlrc

\x auto

70

Hai così tante scelte, come potresti essere confuso :-)? I principali controlli sono:

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

Ognuno ha opzioni e interazioni con gli altri. Le opzioni più automatiche sono:

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

La nuova opzione "\ x auto" passa alla visualizzazione riga per riga solo "se necessario".

-[ 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

Il precedente "\ pset format" è simile in quanto cerca di adattare i dati in modo ordinato sullo schermo, ma torna indietro se non allineato se le intestazioni non si adattano. Ecco un esempio di incartato:

 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

\x autocon \pset pager offè bello.
mitnk,

Sono \x off; \pset format wrappede \x autointesi per essere usati insieme o si escludono a vicenda?
Demitri

20

Una cosa interessante è che possiamo vedere i tavoli in orizzontale, senza piegarli. possiamo usare PAGERla variabile d'ambiente. psql ne fa uso. puoi impostare

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

o solo less -Sse è già disponibile nella riga di comando, se non con la posizione corretta. -S per visualizzare le linee spiegate. puoi passare qualsiasi visualizzatore personalizzato o altre opzioni con esso.

Ho scritto di più in Psql Horizontal Display


1
La risposta è davvero buona. Sono sorpreso che non sia segnato più in alto. Perfetto per chiunque lavori in un terminal.
LUser,

Questo è stato estremamente utile
Merlin

Questo è utile, ma come si scorre verso destra?
Niel de Wet,

18

pspg è uno strumento semplice che offre formattazione avanzata delle tabelle, scorrimento orizzontale, ricerca e molte altre funzionalità.

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

quindi assicurati di aggiornare la PAGERvariabile, ad es. nel tuo~/.bashrc

export PAGER="pspg -s 6" 

dove -ssta per combinazione di colori ( 1-14). Se stai usando repository pgdg semplicemente installa un pacchetto (su una distribuzione simile a Debian):

sudo apt install pspg

esempio di pspg


7

Assicurati anche di controllare \ H, che attiva / disattiva l'output HTML. Non necessariamente facile da leggere sulla console, ma interessante per scaricare in un file (vedi \ o) o incollarlo in una finestra dell'editor / browser per la visualizzazione, specialmente con più file di dati relativamente complessi.


1

puoi usare zenity per visualizzare l'output della query come tabella html.

  • prima implementa lo script bash con il seguente codice:

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

    salvalo come mypager.sh

  • Quindi esportare la variabile d'ambiente PAGER impostando il percorso completo dello script come valore.

    ad esempio: - export PAGER = '/ path / mypager.sh'

  • Quindi accedi al programma psql quindi esegui il comando \ H

  • Ed infine esegui qualsiasi query, l'output tabulato verrà visualizzato in zenity in formato tabella html.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.