PostgreSQL deshabilita más salida

146

Estoy ejecutando un script en mi servidor PostgreSQL:

psql db -f sql.sql

de basho en un cronguión.

Sigue intentando paginar la salida con moreo less.

¿Cómo desactivo la paginación de resultados psql?

Todo lo que quiero hacer es cambiar los datos, no me importa ningún resultado.

Chris
fuente

Respuestas:

244

Para deshabilitar la paginación pero conservar la salida, use:

\pset pager off

Para recordar esta configuración, agréguela a su ~ / .psqlrc .

Consulte el manual de psql .

En versiones anteriores de Pg era solo una palanca, así que \pset pager

Para suprimir completamente el resultado de la consulta, utilícelo \o /dev/nullen su psqlsecuencia de comandos.

Para suprimir psqlel resultado informativo, ejecútelo -qo configúrelo QUIET=1en el entorno.


Para producir resultados y tirarlos, puede redirigir stdouta /dev/null:

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

Puede redirigir tanto stdout como stderr con:

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

pero no lo recomiendo, ya que arrojará información de error que podría advertirle que algo no está funcionando bien. También estás produciendo resultados y tirándolos a la basura, lo cual es ineficiente; es mejor no producirlos en primer lugar ajustando sus consultas.

Craig Ringer
fuente
Eso evita que use un buscapersonas pero no detiene la salida, ¿no? Supongo que necesitarías PAGER="/dev/null" psql db -P pager=always -f sql.sqlhacer que siempre elimine la salida.
Harald Brinkhof
112

Estaba buscando esto también, encontré el camino en una pregunta similar en ServerFault:

psql -P pager=off <other params>

apaga la página de búsqueda, sin suprimir la salida.

Davide
fuente
44
Esta respuesta fue más útil que nada sobre -P en las páginas del manual. ¡Gracias!
2016
eso es exactamente lo que necesito. Gracias :)
Pradip Das
13

Aquí hay otra opción. Tiene la ventaja de que no tiene que recordar nombres de opciones de psql, etc.

psql ... | cat
FMc
fuente
protip absoluto! +1
sjas
11

bash, al ser un shell , tiene 2 transmisiones que puede redirigir los datos de salida: stdout y stderr, ya que esta salida necesita ser redirigida a alguna parte, linux tiene un nodo específico 'descartar todo' accesible a través de / dev / null . Todo lo que envíes allí desaparecerá en el vacío.

(los shells también tienen un flujo de entrada pero lo ignoraré aquí ya que solicitó suprimir la salida)

Estas secuencias están representadas por números: 1 para stdout y 2 para stderr.

Entonces, si desea redirigir simplemente stdout, lo haría con los operadores <y >(básicamente, hacia dónde apunta es hacia dónde fluyen los datos)

supongamos que queremos suprimir stdout (redirigir a / dev / null):

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

Como puede ver, esto es stdout predeterminado, no se ha utilizado ningún número de transmisión si desea utilizar el número de transmisión que escribiría

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

Ahora, si desea suprimir stderror (secuencia número 2), usaría

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

También puede redirigir una secuencia a otra, por ejemplo, stderror a stdout, que es útil si desea guardar toda la salida en algún lugar, regular y errores.

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

importa que no puede haber espacios entre 2>&1

Finalmente, y a veces lo más interesante es el hecho de que puede suprimir toda la salida mediante el uso &>, para cuando lo desee 'perfectamente silencioso'

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

Harald Brinkhof
fuente
1
Si bien esta información es sólida en principio, no funciona en absoluto en este caso específico, porque psql no envía los mensajes informativos a stderr. Están entremezclados con datos en stdout.
Jonathan Hartley
De repente, me doy cuenta de que su punto es que el OP puede utilizar el caso final '&>' para detener el buscapersonas, al suprimir toda la salida. Eliminaré mi voto negativo si modifica su respuesta de alguna manera.
Jonathan Hartley
4
psql db -f sql.sql > /dev/null
Marc B
fuente