El cliente de línea de comandos de Postgres (psql
) incluye tanto parámetros como subcomandos internos para controlar el formato de la salida en las consultas. Este artículo muestra algunas de las posibilidades.
A modo de ejemplo voy a utilizar la siguiente consulta sobre la tabla de tipos:
postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; oid | typname ------+--------- 25 | text 1009 | _text (2 rows)
La salida muestra como resultado dos filas con dos columnas. Por defecto psql
utiliza el formato de texto plano con "decoraciones".
Salida en formato HTML
Utilizando el subcomando \H
o el parámetro -H
en la línea de comandos, es posible cambiar al formato HTML:
postgres=# \H Output format is html.
postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; <table border="1"> <tr> <th align="center">oid</th> <th align="center">typname</th> </tr> <tr valign="top"> <td align="right">25</td> <td align="left">text</td> </tr> <tr valign="top"> <td align="right">1009</td> <td align="left">_text</td> </tr> </table> <p>(2 rows)<br /> </p>
Esta salida puede ser útil cuando se necesita incorporar en un documento.
Este subcomando es un alias de \pset format html
(más adelante).
Salida a archivo
Utilizando el subcomando \o <archivo>
o el parámetro -o <archivo>
en la línea de comandos, es posible redirigir la salida hacia un archivo:
postgres=# \o salida.txt
postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%';
La salida se envía hacia el archivo salida.txt
. Para ver su contenido, cerrar el cliente psql
y volcarlo con cat
o less
(en GNU/Linux):
postgres=# \q [postgres@dbserver ~]$ cat salida.txt <table border="1"> <tr> <th align="center">oid</th> <th align="center">typname</th> </tr> <tr valign="top"> <td align="right">25</td> <td align="left">text</td> </tr> <tr valign="top"> <td align="right">1009</td> <td align="left">_text</td> </tr> </table> <p>(2 rows)<br /> </p>
Agregar o eliminar bordes
La mayoría de las opciones de impresión y control de la salida se establecen con el subcomando \pset
. Este subcomando toma un parámetro, el cual indica la opción a configurar. En algunas opciones, cuando se omite un valor, simplemente se alterna la funcionalidad (habilitar/deshabilitar opción). En otras opciones, al omitir el valor se visualiza el estado de dicha opción.
Si se ejecuta \pset
sin parámetros, se muestra el estado actual de todas las opciones de impresión.
\pset border
permite eliminar (0) o agregar más (2) bordes. Por defecto utiliza el valor 1:
postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; oid | typname ------+--------- 25 | text 1009 | _text (2 rows) postgres=# \pset border 0 Border style is 0. postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; oid typname ---- ------- 25 text 1009 _text (2 rows) postgres=# \pset border 2 Border style is 2. postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; +------+---------+ | oid | typname | +------+---------+ | 25 | text | | 1009 | _text | +------+---------+ (2 rows)
Visualizar el número de registro para cada fila
Es posible obtener el número de registro para cada fila de los resultados habilitando el modo expandido (\pset expanded
):
postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; -[ RECORD 1 ]-- oid | 25 typname | text -[ RECORD 2 ]-- oid | 1009 typname | _text
Esta es una opción binaria que funciona en modo toggle:
postgres=# \pset expanded Expanded display is off.
Salida no alineada y separadores (convertir a CSV)
Es posible utilizar un formato de salida de texto plano no alineado (sin espacios en blanco) mediante la opción \pset format unaligned
. Este formato a su vez permite modificar el separador (\pset fieldsep <carater>
) utilizado para los campos, con lo cual se podría (por ejemplo) convertir la salida a formato CSV:
postgres=# \pset format unaligned Output format is unaligned. postgres=# \pset fieldsep ',' Field separator is ",". postgres=# \pset footer Default footer is off. postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; oid,typname 25,text 1009,_text
La opción \pset footer
permite habilitar/deshabilitar el footer (pie de página que indica la cantidad de filas del resultado).
A su vez, \pset recordsep <caracter>
permite cambiar el separador de filas por defecto (salto de línea) por cualquier otro caracter.
Formato AsciiDoc
La opción de formato (\pset format <formato>
) admite los formatos: unaligned, aligned, wrapped, html, asciidoc, latex, latex-longtable, y troff-ms.
Es posible convertir la salida a formato AsciiDoc mediante \pset format asciidoc
:
postgres=# \pset format asciidoc Output format is asciidoc. postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; [options="header",cols=">l,<l",frame="none"] |==== ^l|oid ^l|typname |25 |text |1009 |_text |==== .... (2 rows) ....
Formato LaTeX
Cambiando a \pset format latex
se convierte la salida a formato LaTeX:
postgres=# \pset format latex Output format is latex. postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; \begin{tabular}{r | l} \textit{oid} & \textit{typname} \\ \hline 25 & text \\ 1009 & \_text \\ \end{tabular} \noindent (2 rows) \\
Esto tiene gran utilidad si se requiere incorporar una tabla en un documento tex.
Ocultar la cabecera
Si se desea ocultar la cabecera (nombre de las columnas) para que se visualicen sólo las tuplas, recurrir al subcomando \t
o a \pset tuples_only
:
postgres=# \t Tuples only is on. postgres=# SELECT oid, typname FROM pg_catalog.pg_type WHERE typname LIKE '%text%'; 25 | text 1009 | _text
Referencias