Formato de salida alternativo para psql


316

Estoy usando PostgreSQL 8.4 en Ubuntu. Tengo una tabla con columnas a c1través cN. Las columnas son lo suficientemente anchas como para que seleccionar todas las columnas provoque que una fila de resultados de consultas se ajuste varias veces. En consecuencia, la salida es difícil de leer.

Cuando los resultados de la consulta constituyen solo unas pocas filas, sería conveniente si pudiera ver los resultados de la consulta de manera que cada columna de cada fila esté en una línea separada, por ejemplo

 c1: <value of row 1's c1>
 c2: <value of row 1's c1>
 ...
 cN: <value of row 1's cN>
 ---- some kind of delimiter ----
 c1: <value of row 2's c1>
 etc.

Estoy ejecutando estas consultas en un servidor donde preferiría no instalar ningún software adicional. ¿Hay una configuración de psql que me permita hacer algo así?

Respuestas:


532

Solo necesitaba pasar más tiempo mirando la documentación. Este comando:

\x on

Hará exactamente lo que quería. Aquí hay algunos resultados de muestra:

select * from dda where u_id=24 and dda_is_deleted='f';
-[ RECORD 1 ]------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
dda_id             | 1121
u_id               | 24
ab_id              | 10304
dda_type           | CHECKING
dda_status         | PENDING_VERIFICATION
dda_is_deleted     | f
dda_verify_op_id   | 44938
version            | 2
created            | 2012-03-06 21:37:50.585845
modified           | 2012-03-06 21:37:50.593425
c_id               | 
dda_nickname       | 
dda_account_name   | 
cu_id              | 1
abd_id             | 

8
También puede probar el formato \ pset envuelto (los formatos permitidos son no alineados, alineados, envueltos, html, latex, troff-ms). Si la pantalla es lo suficientemente estrecha, se ajustará cada columna.
Bryce

12
\xsolo alternará el valor, ¡ahorrándole tres pulsaciones de teclas! (Útil cuando cambia rápidamente entre salidas anchas y estrechas).
msanford

77
Si busca un equivalente \Gde Mysql, intente agregar \x\g\xal final de la consulta o defina un acceso directo al ~/.psqlrcagregar \set G '\\set QUIET 1\\x\\g\\x\\set QUIET 0', luego use al final :G. (nota falta de punto y coma)
Sławomir Lenart

55
¿Es posible pasar de alguna manera " \x on" o el equivalente en la línea de comando? Sería bueno si pudiera guardar (por ejemplo, usando un alias de shell bash) psql --somethingpara que siempre tenga la opción activada de forma predeterminada.
machineghost

2
@machineghost Use -P expanded=autoo--pset expanded=auto
alecdwm

269

(Nuevo) Modo automático ampliado: \ x auto

Nuevo para Postgresql 9.2; PSQL ajusta automáticamente los registros al ancho de la pantalla. anteriormente solo tenía activado o desactivado el modo expandido y tenía que cambiar entre los modos según fuera necesario.

  • Si el registro puede caber en el ancho de la pantalla; psql usa el formato normal.
  • Si el registro no puede caber en el ancho de la pantalla; psql usa el modo expandido.

Para obtener este uso: \ x auto

Postgresql 9.5 Documentación sobre el comando PSQL.


Pantalla ancha, formato normal:

 id | time  |       humanize_time             | value 
----+-------+---------------------------------+-------
  1 | 09:30 |  Early Morning - (9.30 am)      |   570
  2 | 11:30 |  Late Morning - (11.30 am)      |   690
  3 | 13:30 |  Early Afternoon - (1.30pm)     |   810
  4 | 15:30 |  Late Afternoon - (3.30 pm)     |   930
(4 rows)

Pantalla estrecha, formato ampliado:

-[ RECORD 1 ]-+---------------------------
id            | 1
time          | 09:30
humanize_time | Early Morning - (9.30 am)
value         | 570
-[ RECORD 2 ]-+---------------------------
id            | 2
time          | 11:30
humanize_time | Late Morning - (11.30 am)
value         | 690
-[ RECORD 3 ]-+---------------------------
id            | 3
time          | 13:30
humanize_time | Early Afternoon - (1.30pm)
value         | 810
-[ RECORD 4 ]-+---------------------------
id            | 4
time          | 15:30
humanize_time | Late Afternoon - (3.30 pm)
value         | 930

¿Cómo iniciar psql con \ x auto?

Configure el \x autocomando al inicio agregándolo a .psqlrcsu carpeta de inicio y reiniciando psql. Mire en la sección 'Archivos' en el documento psql para obtener más información .

~ / .psqlrc

\x auto

70

Tienes tantas opciones, ¿cómo puedes confundirte :-)? Los controles principales son:

# \pset format
# \H
# \x
# \pset pager off

Cada uno tiene opciones e interacciones con los demás. Las opciones más automáticas son:

# \x off;\pset format wrapped
# \x auto

La nueva opción "\ x auto" cambia a la visualización línea por línea solo "si es necesario".

-[ RECORD 1 ]---------------
id          | 6
description | This is a gallery of oilve oil brands.
authority   | I love olive oil, and wanted to create a place for
reviews and comments on various types.
-[ RECORD 2 ]---------------
id          | 19
description | XXX Test A 
authority   | Testing

El "formato \ pset envuelto" anterior es similar en el sentido de que intenta ajustar los datos de forma ordenada en la pantalla, pero vuelve a estar desalineado si los encabezados no caben. Aquí hay un ejemplo de envuelto:

 id |          description           |            authority            
----+--------------------------------+---------------------------------
  6 | This is a gallery of oilve     | I love olive oil, and wanted to
    ; oil brands.                    ;  create a place for reviews and
    ;                                ;  comments on various types.
 19 | Test Test A                    | Testing

\x autocon \pset pager offes agradable.
mitnk

Son \x off; \pset format wrappedy \x autodestinados a ser utilizados juntos o son mutuamente excluyentes?
Demitri

20

Una cosa interesante es que podemos ver las tablas horizontalmente, sin doblar. Podemos usar PAGERvariables de entorno. psql lo usa. puedes configurar

export PAGER='/usr/bin/less -S'

o simplemente less -Ssi ya está disponible en la línea de comandos, si no con la ubicación adecuada. -S para ver líneas desplegadas. puede pasar cualquier visor personalizado u otras opciones con él.

He escrito más en Psql Horizontal Display


1
La respuesta es realmente buena. Me sorprende que no esté marcado más alto. Perfecto para cualquiera que trabaje en una terminal.
LUser

Esto fue extremadamente útil
Merlin

Esto es útil, pero ¿cómo te desplazas hacia la derecha?
Niel de Wet

18

pspg es una herramienta simple que ofrece formato avanzado de tabla, desplazamiento horizontal, búsqueda y muchas más funciones.

git clone https://github.com/okbob/pspg.git
cd pspg
./configure
make
make install

luego asegúrese de actualizar la PAGERvariable, por ejemplo, en su~/.bashrc

export PAGER="pspg -s 6" 

donde -ssignifica combinación de colores ( 1-14). Si está utilizando repositorios pgdg, simplemente instale un paquete (en una distribución similar a Debian):

sudo apt install pspg

ejemplo de pspg


7

También asegúrese de revisar \ H, que activa / desactiva la salida HTML. No necesariamente fácil de leer en la consola, pero interesante para descargar en un archivo (ver \ o) o pegar en una ventana de editor / navegador para ver, especialmente con múltiples filas de datos relativamente complejos.


1

puede usar el zenity para mostrar el resultado de la consulta como tabla html.

  • Primero implemente el script bash con el siguiente código:

    cat> '/tmp/sql.op'; zenity --text-info --html --filename = '/ tmp / sql.op';

    guárdelo como mypager.sh

  • Luego, exporte la variable de entorno PAGER estableciendo la ruta completa del script como valor.

    por ejemplo: - export PAGER = '/ path / mypager.sh'

  • Luego inicie sesión en el programa psql y luego ejecute el comando \ H

  • Y finalmente ejecute cualquier consulta, la salida en tabla se mostrará en el zenity en formato de tabla html.

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.