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.

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.


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.


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

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


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


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.