2012-06-24 15 views
89

Sono in esecuzione di uno script sul mio server PostgreSQL:PostgreSQL disabilitano più uscita

psql db -f sql.sql 

da bash o in uno script cron.

Continua a cercare l'impaginazione dell'output con more o less.

Come disabilitare l'impaginazione dei risultati in psql?

Tutto ciò che voglio fare è modificare i dati, non mi interessa alcun output.

risposta

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

bash, essendo un shell, ha 2 streams si può reindirizzare i dati di uscita: stdout e stderr, perché questa uscita deve essere reindirizzato qualche parte, Linux ha uno specifico 'scartare tutto' nodo raggiungibile attraverso /dev/null. Tutto ciò che invii lì sparirà nel vuoto.

(conchiglie hanno anche un flusso di input ma ignoreremo questo qui da quando lei ha chiesto la soppressione di uscita)

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

Quindi, se si desidera reindirizzare solo stdout faresti che con le < e > operatori (fondamentalmente in cui si indica è dove i flussi di dati a)

supponiamo che vogliamo sopprimere stdout (reindirizzamento a/dev/null):

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

Come si può vedere si tratta di stdout è predefinita, nessun numero flusso è stato utilizzato se si volesse utilizzare il numero di flusso si sarebbe scrivere

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

Ora, se si desidera eliminare stderror (numero flusso 2), utilizza

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

Si potrebbe anche reindirizzare un flusso a un altro, per esempio stderror sullo standard output, che è utile se vuoi salvare tutto l'output da qualche parte, regolare ed errori.

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

si badi bene non ci possono essere spazi tra 2>&1

Infine, e talvolta più interessante è il fatto che è possibile sopprimere tutto l'output utilizzando &>, per quando si desidera e 'assolutamente tranquilla'

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

+1

Mentre questa informazione è il suono in linea di principio, non funziona affatto in questo caso specifico, perché psql non invia i messaggi informativi a stderr. Sono mescolati con i dati sullo stdout. –

+0

All'improvviso mi rendo conto che il tuo punto è che il caso "&>" finale può essere usato dall'OP per fermare il cercapersone, sopprimendo tutto l'output. Toglierò il mio downvote se modifichi la risposta in qualsiasi modo. –

153

Per disattivare la paginazione ma mantengono l'uscita, Uso:

\pset pager off 

Per ricordare questa impostazione, aggiungerlo al ~/.psqlrc.

Vedere the psql manual.

su versioni precedenti di Pg Era solo una ginocchiera, così \pset pager

Per tutto risultato di una query sopprimere, utilizzare \o /dev/null nello script psql.

Per sopprimere l'output informativo di psql, eseguirlo con -q o impostare QUIET=1 nell'ambiente.


Per produrre risultati e li buttare via è possibile reindirizzare stdout-/dev/null con:

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

È possibile reindirizzare sia stdout e stderr con:

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

ma non lo faccio lo raccomando, poiché getterà via le informazioni di errore che potrebbero avvisarti che qualcosa non sta andando bene. Stai anche producendo risultati e gettandoli via, il che è inefficiente; stai meglio non li produci in primo luogo, aggiustando le tue domande.

+0

Questo impedisce di usare un cercapersone ma non interrompe l'uscita, no? Sto indovinando che avresti bisogno di 'PAGER ="/dev/null "psql db -P pager = sempre -f sql.sql' per fare in modo che uccida sempre l'output. –

+2

No, usa \ o/dev/null –

67

Cercavo anche questo, ho trovato il modo in un similar question ServerFault:

psql -P pager=off <other params> 

si spegne la cosa paging, senza sopprimere uscita.

+1

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

+0

questo è esattamente ciò di cui ho bisogno.Grazie :) –

1

Ecco un'altra opzione. Essa ha il vantaggio che non c'è bisogno di ricordare i nomi delle opzioni psql, ecc

psql ... | cat 
+0

protip assoluto! +1 – sjas

Problemi correlati