PostgreSQL disabilita più output


146

Sto eseguendo uno script sul mio server PostgreSQL:

psql db -f sql.sql

da basho in una cronsceneggiatura.

Continua a provare a impaginare l'output con moreo less.

Come disabilitare la paginazione dei risultati in psql?

Tutto quello che voglio fare è cambiare i dati, non mi interessa alcun output.

Risposte:


244

Per disabilitare l'impaginazione ma conservare l'output, utilizzare:

\pset pager off

Per ricordare questa impostazione, aggiungila alla tua ~ / .psqlrc .

Vedere il manuale di psql .

Nelle versioni precedenti di Pg era solo un interruttore, quindi \pset pager

Per eliminare completamente l'output della query, utilizzare \o /dev/null nello psqlscript.

Per sopprimere psqll'output informativo, eseguirlo -qo impostarloQUIET=1 nell'ambiente.


Per produrre risultati e li buttare via è possibile reindirizzare stdouta /dev/nullcon:

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

Puoi reindirizzare sia stdout che stderr con:

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

ma non lo consiglio, poiché getterà via informazioni di errore che potrebbero avvisarti che qualcosa non sta andando bene. Stai anche producendo risultati e li butti via, il che è inefficiente; stai meglio non solo producendoli in primo luogo regolando le tue query.


Questo gli impedisce di usare un cercapersone ma non ferma l'output, no? Immagino che dovresti PAGER="/dev/null" psql db -P pager=always -f sql.sqlfarlo uccidere sempre l'output.
Harald Brinkhof,

112

Stavo cercando anche questo, ho trovato la strada in una domanda simile su ServerFault:

psql -P pager=off <other params>

disattiva il paging, senza sopprimere l'output.


4
Questa risposta è stata più utile di qualsiasi altra cosa su -P nelle pagine man. Grazie!
Nord

questo è esattamente ciò di cui ho bisogno. Grazie :)
Pradip Das,

13

Ecco un'altra opzione. Ha il vantaggio di non dover ricordare i nomi delle opzioni psql, ecc.

psql ... | cat

protip assoluto! +1
sjas,

11

bash, essendo una shell , ha 2 stream che puoi reindirizzare a quei dati di output: stdout e stderr, poiché questo output deve essere reindirizzato da qualche parte, Linux ha uno specifico nodo 'scarta tutto' raggiungibile attraverso / dev / null . Tutto ciò che invii lì scomparirà nel vuoto.

(le shell hanno anche un flusso di input ma lo ignorerò qui poiché hai chiesto di sopprimere l'output)

Questi flussi sono rappresentati da numeri: 1 per stdout e 2 per stderr.

Quindi, se vuoi reindirizzare solo stdout, lo faresti con gli operatori <e >(sostanzialmente dove punta a dove i dati scorrono)

supponiamo di voler sopprimere stdout (reindirizzare a / dev / null):

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

Come puoi vedere, questo è stdout è predefinito, nessun numero di flusso è stato usato se volevi usare il numero di flusso che scrivevi

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

Ora se vuoi sopprimere stderror (stream numero 2), lo useresti

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

Puoi anche reindirizzare uno stream a un altro, ad esempio stderror su stdout, che è utile se vuoi salvare tutto l'output da qualche parte, regolare ed errori.

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

badate che non possono esserci spazi tra 2>&1

Infine e talvolta il più interessante è il fatto che è possibile sopprimere tutti gli output utilizzando &>, perché quando lo si desidera è "perfettamente silenzioso"

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


1
Sebbene queste informazioni siano valide in linea di principio, in questo caso specifico non funzionano affatto, poiché psql non invia i messaggi informativi a stderr. Si mescolano con i dati su stdout.
Jonathan Hartley,

Improvvisamente mi rendo conto che il tuo punto è che il caso finale '&>' può essere usato dall'OP per fermare il cercapersone, sopprimendo tutti gli output. Rimuoverò il mio voto negativo se modifichi in qualche modo la tua risposta.
Jonathan Hartley,


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.