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


Tal vez pueda interesarte


Compartí este artículo