Come disattivare l'intestazione solo in psql (postgresql)


18

Sto usando PostgreSQL 9.1.X

Sto cercando di creare uno psqlscript per stampare i risultati senza un'intestazione ma includendo un piè di pagina.

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

Dal documento sopra

\pset tuples_only

disattiveranno sia l'intestazione che il piè di pagina. e

\pset footer off

disattiva solo il piè di pagina.

C'è un modo psqlper disattivare l'intestazione e mantenere il piè di pagina?

So che ci sono molti modi per aggirare questo problema usando shell / perl / qualunque strumento di testo ti piaccia, tuttavia mi chiedo perché ci sia una configurazione per il piè di pagina ma non per l'intestazione?

id <--this line I don't want
---- <-- this line I don't want either
 1  <-- this line, yes
(1 row) <-- yes, I want it!

Sei su Unix? Se è così, puoi usare head / tail / grep / awk / sed / un milione di altre cose
Phil,

Risposte:


10

Quando si esegue psqldalla shell è possibile utilizzare l' -topzione (solo stampa tuple):

$ 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

In psqluso \tper disattivare la stampa dell'intestazione e il conteggio delle righe.


7

La mia soluzione non è proprio quella di spegnere, ma piuttosto di scartare le intestazioni.

Puoi provare taill'output della query:

\o | tail -n +2

Con \o, puoi reindirizzare l'output su un file o una pipe, come in questo caso. Anche questa soluzione ha il suo difetto: almeno nel mio caso, dopo l'esecuzione di SELECT [...], non torno a un prompt a meno che non prema un tasto. E la prima riga di output appare dopo un prompt. Se reindirizzi quindi l'output su un file, non dovrebbe essere un problema.

Questo comportamento può essere evitato se si imposta la PAGERvariabile ambientale in modo appropriato e si utilizza sempre il cercapersone 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)

Nella psqlversione fornita con PostgreSQL 9.2 è possibile utilizzare il \setenvcomando per comodità (intendo dire che non è necessario impostare una variabile env che potrebbe influire anche su altre applicazioni).


bello hack, buono a sapersi opzione cercapersone. ma davvero non esiste alcuna opzione per l'intestazione stessa? Forse dovrei controllare il mailist di postgresql
skong,

@sinbadblue No. Come hai già verificato, no. Puoi pubblicare una richiesta di funzionalità, però :) Sarebbe un utile avanzamento.
dezso

5

Devi aggiungere un'opzione da riga di comando psql -P "footer=off". Questa opzione mantiene i titoli delle colonne nel risultato.


Leggi la domanda
Colin 't Hart,
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.