psql

psql — terminal interactiva de PostgreSQL

Synopsis

psql [option...] [dbname [username]]

Descripción

psql es una interfaz basada en terminal para PostgreSQL. Te permite introducir consultas de forma interactiva, enviarlas a PostgreSQL y ver los resultados de las mismas. Alternativamente, la entrada puede provenir de un archivo o de argumentos de la línea de comandos. Además, psql proporciona una serie de metacomandos y varias características similares a las de un shell para facilitar la escritura de scripts y la automatización de una amplia variedad de tareas.

Opciones

-a
--echo-all #

Muestra todas las líneas de entrada no vacías en la salida estándar a medida que se leen. (Esto no se aplica a las líneas leídas de forma interactiva). Esto es equivalente a establecer la variable ECHO en all.

-A
--no-align #

Cambia al modo de salida no alineado. (El modo de salida predeterminado es aligned). Esto es equivalente a \pset format unaligned.

-b
--echo-errors #

Muestra los comandos SQL fallidos en la salida de error estándar. Esto es equivalente a establecer la variable ECHO en errors.

-c command
--command=command #

Especifica que psql debe ejecutar la cadena de comando dada, command. Esta opción se puede repetir y combinar en cualquier orden con la opción -f. Cuando se especifica -c o -f, psql no lee comandos de la entrada estándar; en su lugar, termina después de procesar todas las opciones -c y -f en secuencia.

command debe ser una cadena de comando que sea completamente analizable por el servidor (es decir, no contiene características específicas de psql), o un único comando de barra invertida. Por lo tanto, no puedes mezclar comandos SQL y metacomandos de psql dentro de una opción -c. Para lograr eso, podrías usar opciones -c repetidas o enviar la cadena a través de una tubería (pipe) a psql, por ejemplo:

psql -c '\x' -c 'SELECT * FROM foo;'

o

echo '\x \\ SELECT * FROM foo;' | psql

(\\ es el metacomando separador).

Cada cadena de comando SQL pasada a -c se envía al servidor como una sola petición. Debido a esto, el servidor la ejecuta como una sola transacción, incluso si la cadena contiene múltiples comandos SQL, a menos que se incluyan comandos explícitos BEGIN/COMMIT en la cadena para dividirla en múltiples transacciones. (Consulta Section 54.2.2.1 para obtener más detalles sobre cómo maneja el servidor las cadenas de consultas múltiples).

Si no deseas que se ejecuten varios comandos en una sola transacción, utiliza comandos -c repetidos o introduce múltiples comandos en la entrada estándar de psql, ya sea utilizando echo como se ilustra arriba, o a través de un «here-document» del shell, por ejemplo:

psql <<EOF
\x
SELECT * FROM foo;
EOF
--csv #

Cambia al modo de salida CSV (valores separados por comas). Esto es equivalente a \pset format csv.

-d dbname
--dbname=dbname #

Especifica el nombre de la base de datos a la que conectarse. Esto es equivalente a especificar dbname como el primer argumento que no es una opción en la línea de comandos. El dbname puede ser una cadena de conexión. Si es así, los parámetros de la cadena de conexión anularán cualquier opción de línea de comandos en conflicto.

-e
--echo-queries #

Copia todos los comandos SQL enviados al servidor a la salida estándar también. Esto es equivalente a establecer la variable ECHO en queries.

-E
--echo-hidden #

Muestra las consultas reales generadas por \d y otros comandos de barra invertida. Puedes usar esto para estudiar las operaciones internas de psql. Esto es equivalente a establecer la variable ECHO_HIDDEN en on.

-f filename
--file=filename #

Lee comandos desde el archivo filename, en lugar de la entrada estándar. Esta opción se puede repetir y combinar en cualquier orden con la opción -c. Cuando se especifica -c o -f, psql no lee comandos de la entrada estándar; en su lugar, termina después de procesar todas las opciones -c y -f en secuencia. Excepto por eso, esta opción es en gran medida equivalente al metacomando \i.

Si filename es - (guion), entonces se lee la entrada estándar hasta una indicación de EOF o el metacomando \q. Esto se puede utilizar para intercalar la entrada interactiva con la entrada de archivos. Ten en cuenta, sin embargo, que Readline no se utiliza en este caso (al igual que si se hubiera especificado -n).

El uso de esta opción es sutilmente diferente al de escribir psql < filename. En general, ambos harán lo que esperas, pero usar -f habilita algunas características interesantes, como mensajes de error con números de línea. También existe una pequeña posibilidad de que el uso de esta opción reduzca la sobrecarga de inicio. Por otro lado, la variante que utiliza la redirección de entrada del shell está (en teoría) garantizada para producir exactamente la misma salida que habrías recibido si hubieras introducido todo a mano.

-F separator
--field-separator=separator #

Utiliza separator como el separador de campos para la salida no alineada. Esto es equivalente a \pset fieldsep o \f.

-h hostname
--host=hostname #

Especifica el nombre de host de la máquina en la que se está ejecutando el servidor. Si el valor comienza con una barra diagonal, se utiliza como el directorio para el socket de dominio Unix.

-H
--html #

Cambia al modo de salida HTML. Esto es equivalente a \pset format html o al comando \H.

-l
--list #

Enumera todas las bases de datos disponibles y luego termina. Se ignoran las demás opciones que no son de conexión. Esto es similar al metacomando \list.

Cuando se utiliza esta opción, psql se conectará a la base de datos postgres, a menos que se nombre una base de datos diferente en la línea de comandos (opción -d o argumento que no es una opción, posiblemente a través de una entrada de servicio, pero no a través de una variable de entorno).

-L filename
--log-file=filename #

Escribe toda la salida de las consultas en el archivo filename, además del destino de salida normal.

-n
--no-readline #

No utiliza Readline para la edición de líneas y no utiliza el historial de comandos (consulta the section called “Edición de la línea de comandos (Command-Line Editing)” más abajo).

-o filename
--output=filename #

Envía toda la salida de las consultas al archivo filename. Esto es equivalente al comando \o.

-p port
--port=port #

Especifica el puerto TCP o la extensión del archivo de socket de dominio Unix local en el que el servidor está escuchando las conexiones. El valor predeterminado es el valor de la variable de entorno PGPORT o, si no está establecida, el puerto especificado en tiempo de compilación, normalmente 5432.

-P assignment
--pset=assignment #

Especifica las opciones de impresión, al estilo de \pset. Ten en cuenta que aquí tienes que separar el nombre y el valor con un signo de igualdad en lugar de un espacio. Por ejemplo, para establecer el formato de salida a LaTeX, podrías escribir -P format=latex.

-q
--quiet #

Especifica que psql debe hacer su trabajo silenciosamente. De forma predeterminada, imprime mensajes de bienvenida y varias salidas informativas. Si se utiliza esta opción, no ocurre nada de esto. Esto es útil con la opción -c. Esto es equivalente a establecer la variable QUIET a on.

-R separator
--record-separator=separator #

Usa separator como el separador de registros para la salida no alineada. Esto es equivalente a \pset recordsep.

-s
--single-step #

Ejecuta en modo de paso único. Esto significa que se le pregunta al usuario antes de que cada comando se envíe al servidor, con la opción de cancelar la ejecución también. Usa esto para depurar scripts.

-S
--single-line #

Ejecuta en modo de línea única, donde una nueva línea finaliza un comando SQL, al igual que lo hace un punto y coma.

Note

Este modo se proporciona para quienes insisten en él, pero no se te anima necesariamente a usarlo. En particular, si mezclas SQL y metacomandos en una línea, el orden de ejecución puede no ser siempre claro para el usuario sin experiencia.

-t
--tuples-only #

Desactiva la impresión de los nombres de las columnas y de los pies de página con el recuento de filas de resultado, etc. Esto es equivalente a \t o \pset tuples_only.

-T table_options
--table-attr=table_options #

Especifica las opciones que se colocarán dentro de la etiqueta HTML table. Consulta \pset tableattr para más detalles.

-U username
--username=username #

Conéctate a la base de datos como el usuario username en lugar del predeterminado. (Debes tener permiso para hacerlo, por supuesto).

-v assignment
--set=assignment
--variable=assignment #

Realiza una asignación de variable, como el metacomando \set. Ten en cuenta que debes separar el nombre y el valor, si lo hay, por un signo de igualdad en la línea de comandos. Para eliminar una variable, omite el signo de igualdad. Para establecer una variable con un valor vacío, usa el signo de igualdad pero omite el valor. Estas asignaciones se realizan durante el procesamiento de la línea de comandos, por lo que las variables que reflejan el estado de la conexión se sobrescribirán más tarde.

-V
--version #

Imprime la versión de psql y sal.

-w
--no-password #

Nunca solicites una contraseña. Si el servidor requiere autenticación por contraseña y no hay una contraseña disponible de otras fuentes, como un archivo .pgpass, el intento de conexión fallará. Esta opción puede ser útil en trabajos por lotes (batches) y scripts en los que no haya ningún usuario presente para introducir una contraseña.

Ten en cuenta que esta opción permanecerá activa durante toda la sesión, por lo que afecta tanto al uso del metacomando \connect como al intento de conexión inicial.

-W
--password #

Fuerza a psql a solicitar una contraseña antes de conectarse a una base de datos, incluso si la contraseña no se va a utilizar.

Si el servidor requiere autenticación por contraseña y no hay una contraseña disponible de otras fuentes como un archivo .pgpass, psql solicitará una contraseña en cualquier caso. Sin embargo, psql desperdiciará un intento de conexión para averiguar que el servidor requiere una contraseña. En algunos casos, vale la pena escribir -W para evitar el intento de conexión adicional.

Ten en cuenta que esta opción permanecerá activa durante toda la sesión, por lo que afecta tanto al uso del metacomando \connect como al intento de conexión inicial.

-x
--expanded #

Activa el modo de formato de tabla expandido. Esto es equivalente a \x o \pset expanded.

-X
--no-psqlrc #

No leas el archivo de inicio (ni el archivo psqlrc global del sistema ni el archivo ~/.psqlrc del usuario).

-z
--field-separator-zero #

Establece el separador de campos para la salida no alineada en un byte cero. Esto es equivalente a \pset fieldsep_zero.

-0
--record-separator-zero #

Establece el separador de registros para la salida no alineada en un byte cero. Esto es útil para interactuar, por ejemplo, con xargs -0. Esto es equivalente a \pset recordsep_zero.

-1
--single-transaction #

Esta opción solo se puede usar en combinación con una o más opciones -c y/o -f. Hace que psql ejecute un comando BEGIN antes de la primera de estas opciones y un comando COMMIT después de la última, envolviendo así todos los comandos en una sola transacción. Si alguno de los comandos falla y la variable ON_ERROR_STOP está establecida, se envía un comando ROLLBACK en su lugar. Esto asegura que o bien todos los comandos se completen con éxito, o no se aplique ningún cambio.

Si los propios comandos contienen BEGIN, COMMIT o ROLLBACK, esta opción no tendrá los efectos deseados. Además, si un comando individual no se puede ejecutar dentro de un bloque de transacción, especificar esta opción hará que falle toda la transacción.

-?
--help[=topic] #

Muestra ayuda sobre psql y sal. El parámetro opcional topic (cuyo valor predeterminado es options) selecciona qué parte de psql se explica: commands describe los comandos de barra invertida de psql; options describe las opciones de línea de comandos que se pueden pasar a psql; y variables muestra ayuda sobre las variables de configuración de psql.

Exit Status

psql devuelve 0 al shell si finalizó normalmente, 1 si ocurre un error fatal propio (por ejemplo, falta de memoria, archivo no encontrado), 2 si la conexión con el servidor falló y la sesión no era interactiva, y 3 si ocurrió un error en un script y la variable ON_ERROR_STOP estaba establecida.

Usage

Connecting to a Database

psql es una aplicación cliente normal de PostgreSQL. Para conectarte a una base de datos necesitas saber el nombre de la base de datos de destino, el nombre del host y el número de puerto del servidor, y el nombre de usuario de la base de datos con el que deseas conectarte. Puedes indicarle a psql estos parámetros mediante las opciones de la línea de comandos -d, -h, -p y -U respectivamente. Si se encuentra un argumento que no pertenece a ninguna opción, se interpretará como el nombre de la base de datos (o el nombre de usuario de la base de datos, si el nombre de la base de datos ya se ha especificado). No todas estas opciones son obligatorias; existen valores predeterminados muy útiles. Si omites el nombre del host, psql se conectará a través de un socket de dominio Unix a un servidor en el host local, o mediante TCP/IP a localhost en Windows. El número de puerto predeterminado se determina en el momento de la compilación. Dado que el servidor de bases de datos utiliza el mismo valor predeterminado, no tendrás que especificar el puerto en la mayoría de los casos. El nombre de usuario de la base de datos predeterminado es tu nombre de usuario del sistema operativo. Una vez determinado el nombre de usuario de la base de datos, se utiliza como el nombre de la base de datos predeterminado. Ten en cuenta que no puedes conectarte a cualquier base de datos con cualquier nombre de usuario. Tu administrador de base de datos debería haberte informado sobre tus derechos de acceso.

Cuando los valores predeterminados no sean los adecuados, puedes ahorrarte escribir estableciendo las variables de entorno PGDATABASE, PGHOST, PGPORT y/o PGUSER con los valores correspondientes. (Para ver variables de entorno adicionales, consulta Section 32.15). También es conveniente tener un archivo ~/.pgpass para evitar tener que introducir contraseñas con regularidad. Consulta Section 32.16 para obtener más información.

Una forma alternativa de especificar los parámetros de conexión es en una cadena conninfo o en un URI, que se utiliza en lugar de un nombre de base de datos. Este mecanismo te ofrece un control muy amplio sobre la conexión. Por ejemplo:

$ psql "service=myservice sslmode=require"
$ psql postgresql://dbmaster:5433/mydb?sslmode=require

De esta forma también puedes utilizar LDAP para la búsqueda de parámetros de conexión tal y como se describe en Section 32.18. Consulta Section 32.1.2 para obtener más información sobre todas las opciones de conexión disponibles.

Si no se pudo establecer la conexión por cualquier motivo (por ejemplo, privilegios insuficientes, el servidor no se está ejecutando en el host de destino, etc.), psql devolverá un error y finalizará.

Si tanto la entrada estándar como la salida estándar son una terminal, entonces psql establece la codificación del cliente en auto, que detectará la codificación del cliente adecuada a partir de la configuración regional (variable de entorno LC_CTYPE en sistemas Unix). Si esto no funciona como se esperaba, la codificación del cliente se puede sobrescribir mediante la variable de entorno PGCLIENTENCODING.

Entering SQL Commands

En un funcionamiento normal, psql proporciona un símbolo del sistema con el nombre de la base de datos a la que psql está conectado actualmente, seguido de la cadena =>. Por ejemplo:

$ psql testdb
psql (18.4)
Escribe "help" para obtener ayuda.

testdb=>

En el símbolo del sistema, el usuario puede introducir comandos SQL. Normalmente, las líneas de entrada se envían al servidor cuando se alcanza un punto y coma que finaliza el comando. El final de una línea no finaliza un comando. Por lo tanto, los comandos se pueden distribuir en varias líneas para mayor claridad. Si el comando se envió y ejecutó sin errores, los resultados del comando se muestran en la pantalla.

Si usuarios no confiables tienen acceso a una base de datos que no ha adoptado un patrón de uso seguro de esquemas, comienza tu sesión eliminando los esquemas en los que cualquiera pueda escribir de search_path. Se puede añadir options=-csearch_path= a la cadena de conexión o ejecutar SELECT pg_catalog.set_config('search_path', '', false) antes de otros comandos SQL. Esta consideración no es específica de psql; se aplica a cualquier interfaz para ejecutar comandos SQL arbitrarios.

Cada vez que se ejecuta un comando, psql también comprueba si hay eventos de notificación asíncronos generados por LISTEN y NOTIFY.

Mientras que los comentarios de bloque de estilo C se pasan al servidor para su procesamiento y eliminación, los comentarios estándar de SQL son eliminados por psql.

Meta-Commands

Cualquier cosa que introduzcas en psql que comience con una barra invertida sin comillas es un metacomando de psql que procesa el propio psql. Estos comandos hacen que psql sea más útil para la administración o la creación de scripts. Los metacomandos se suelen denominar comandos de barra.

El formato de un comando de psql es la barra invertida, seguida inmediatamente por un verbo de comando y luego por los argumentos. Los argumentos están separados del verbo de comando y entre sí por cualquier número de caracteres de espacio en blanco.

Para incluir espacios en blanco en un argumento, puedes encerrarlo entre comillas simples. Para incluir una comilla simple en un argumento, escribe dos comillas simples dentro del texto entre comillas simples. Cualquier elemento contenido entre comillas simples está, además, sujeto a sustituciones de estilo C para \n (nueva línea), \t (tabulador), \b (retroceso), \r (retorno de carro), \f (salto de página), \dígitos (octal) y \xdígitos (hexadecimal). Una barra invertida delante de cualquier otro carácter dentro de un texto entre comillas simples escapa ese carácter individual, sea cual sea.

Si aparece una parte con dos puntos sin comillas (:) seguida de un nombre de variable de psql dentro de un argumento, se sustituye por el valor de la variable, tal y como se describe en SQL Interpolation más adelante. Las formas :'variable_name' y :"variable_name" descritas allí también funcionan. La sintaxis :{?variable_name} permite comprobar si una variable está definida. Se sustituye por TRUE o FALSE. Escapar los dos puntos con una barra invertida los protege de la sustitución.

Dentro de un argumento, el texto encerrado entre comillas invertidas (`) se toma como una línea de comandos que se pasa al shell. La salida del comando (eliminando cualquier nueva línea al final) sustituye al texto entre comillas invertidas. Dentro del texto encerrado entre comillas invertidas, no se produce ningún escape especial u otro procesamiento, excepto que las apariciones de :variable_name donde variable_name es un nombre de variable de psql se sustituyen por el valor de la variable. Además, las apariciones de :'variable_name' se sustituyen por el valor de la variable adecuadamente entrecomillado para convertirse en un único argumento de comando del shell. (Esta última forma es casi siempre preferible, a menos que estés muy seguro de lo que hay en la variable). Debido a que los caracteres de retorno de carro y salto de línea no se pueden entrecomillar de forma segura en todas las plataformas, la forma :'variable_name' imprime un mensaje de error y no sustituye el valor de la variable cuando tales caracteres aparecen en el valor.

Algunos comandos toman un identificador SQL (como el nombre de una tabla) como argumento. Estos argumentos siguen las reglas sintácticas de SQL: las letras sin comillas se convierten obligatoriamente a minúsculas, mientras que las comillas dobles (") protegen las letras de la conversión de mayúsculas y minúsculas y permiten la incorporación de espacios en blanco en el identificador. Dentro de las comillas dobles, las comillas dobles duplicadas se reducen a una sola comilla doble en el nombre resultante. Por ejemplo, FOO"BAR"BAZ se interpreta como fooBARbaz, y "A weird"" name" se convierte en A weird" name.

El análisis de los argumentos se detiene al final de la línea, o cuando se encuentra otra barra invertida sin comillas. Una barra invertida sin comillas se toma como el inicio de un nuevo metacomando. La secuencia especial \\ (dos barras invertidas) marca el final de los argumentos y continúa analizando los comandos SQL, si los hubiera. De esta forma, los comandos SQL y de psql se pueden mezclar libremente en una línea. Pero en cualquier caso, los argumentos de un metacomando no pueden continuar más allá del final de la línea.

Muchos de los metacomandos actúan sobre el búfer de consulta actual. Este es simplemente un búfer que contiene cualquier texto de comando SQL que se haya escrito pero que aún no se haya enviado al servidor para su ejecución. Esto incluirá las líneas de entrada anteriores, así como cualquier texto que aparezca antes del metacomando en la misma línea.

Muchos de los metacomandos también permiten añadir x como opción. Esto hará que los resultados se muestren en modo expandido, como si se hubiera usado \x o \pset expanded.

Se definen los siguientes metacomandos:

\a #

Si el formato de salida de tabla actual es no alineado, se cambia a alineado. Si no es no alineado, se establece como no alineado. Este comando se mantiene por compatibilidad con versiones anteriores. Consulta \pset para obtener una solución más general.

\bind [ parameter ] ... #

Establece los parámetros de consulta para la próxima ejecución de consulta, pasando los parámetros especificados para cualquier marcador de posición de parámetro ($1, etc.).

Ejemplo:

INSERT INTO tbl1 VALUES ($1, $2) \bind 'first value' 'second value' \g

Esto también funciona para los comandos de ejecución de consultas distintos de \g, como \gx y \gset.

Este comando hace que se utilice el protocolo de consulta extendida (consulta Section 54.1.2), a diferencia del funcionamiento normal de psql, que utiliza el protocolo de consulta simple. Por lo tanto, este comando puede ser útil para probar el protocolo de consulta extendida desde psql. (El protocolo de consulta extendida se utiliza incluso si la consulta no tiene parámetros y este comando especifica cero parámetros). Este comando afecta solo a la siguiente consulta ejecutada; todas las consultas posteriores utilizarán el protocolo de consulta simple de forma predeterminada.

\bind_named statement_name [ parameter ] ... #

\bind_named es equivalente a \bind, excepto que toma el nombre de una sentencia preparada existente como primer parámetro. Una cadena vacía denota la sentencia preparada sin nombre.

Ejemplo:

INSERT INTO tbls1 VALUES ($1, $2) \parse stmt1
\bind_named stmt1 'first value' 'second value' \g

Este comando hace que se utilice el protocolo de consulta extendida (consulta Section 54.1.2), a diferencia del funcionamiento normal de psql, que utiliza el protocolo de consulta simple. Por lo tanto, este comando puede ser útil para probar el protocolo de consulta extendida desde psql.

\c or \connect [ -reuse-previous=on|off ] [ dbname [ username ] [ host ] [ port ] | conninfo ] #

Establece una nueva conexión con un servidor PostgreSQL. Los parámetros de conexión a utilizar se pueden especificar utilizando una sintaxis posicional (uno o más de: nombre de base de datos, usuario, host y puerto), o utilizando una cadena de conexión conninfo tal y como se detalla en Section 32.1.1. Si no se proporcionan argumentos, se establece una nueva conexión utilizando los mismos parámetros que antes.

Especificar cualquiera de los parámetros dbname, username, host o port como - equivale a omitir dicho parámetro.

La nueva conexión puede reutilizar los parámetros de conexión de la conexión anterior; no solo el nombre de la base de datos, el usuario, el host y el puerto, sino también otras configuraciones como sslmode. De forma predeterminada, los parámetros se reutilizan en la sintaxis posicional, pero no cuando se proporciona una cadena conninfo. Pasar un primer argumento de -reuse-previous=on o -reuse-previous=off sobrescribe ese comportamiento predeterminado. Si se reutilizan los parámetros, cualquier parámetro que no se especifique explícitamente como un parámetro posicional o en la cadena conninfo se tomará de los parámetros de la conexión existente. Una excepción es que si la configuración de host se cambia de su valor anterior utilizando la sintaxis posicional, se descarta cualquier configuración de hostaddr presente en los parámetros de la conexión existente. Además, cualquier contraseña utilizada para la conexión existente se reutilizará solo si no se cambian las configuraciones de usuario, host y puerto. Cuando el comando no especifica ni reutiliza un parámetro en particular, se utiliza el valor predeterminado de libpq.

Si la nueva conexión se realiza correctamente, se cierra la conexión anterior. Si el intento de conexión falla (nombre de usuario incorrecto, acceso denegado, etc.), se mantendrá la conexión anterior si psql está en modo interactivo. Pero cuando executing a non-interactive script, the old connection is closed and an error is reported. That may or may not terminate the script; if it does not, all database-accessing commands will fail until another \connect command is successfully executed. This distinction was chosen as a user convenience against typos on the one hand, and a safety mechanism that scripts are not accidentally acting on the wrong database on the other hand. Note that whenever a \connect command attempts to re-use parameters, the values re-used are those of the last successful connection, not of any failed attempts made subsequently. However, in the case of a non-interactive \connect failure, no parameters are allowed to be re-used later, since the script would likely be expecting the values from the failed \connect to be re-used.

Ejemplos:

=> \c mydb myuser host.dom 6432
=> \c service=foo
=> \c "host=localhost port=5432 dbname=mydb connect_timeout=10 sslmode=disable"
=> \c -reuse-previous=on sslmode=require    -- cambia solo sslmode
=> \c postgresql://tom@localhost/mydb?application_name=myapp
\C [ title ] #

Establece el título de cualquier tabla que se imprima como resultado de una consulta o elimina dicho título. Este comando es equivalente a \pset title title. (El nombre de este comando proviene de caption [título], ya que antes solo se utilizaba para establecer el título en una tabla HTML).

\cd [ directory ] #

Cambia el directorio de trabajo actual a directory. Sin argumentos, cambia al directorio de inicio (home) del usuario actual. Para obtener detalles sobre cómo se encuentran los directorios de inicio, consulta Section 32.16.

Tip

Para imprimir tu directorio de trabajo actual, usa \! pwd.

\close_prepared prepared_statement_name #

Cierra la sentencia preparada especificada. Una cadena vacía denota la sentencia preparada sin nombre. Si no existe ninguna sentencia preparada con este nombre, la operación no hace nada (no-op).

Ejemplo:

SELECT $1 \parse stmt1
\close_prepared stmt1

Este comando hace que se utilice el protocolo de consulta extendida, a diferencia del funcionamiento normal de psql, que utiliza el protocolo de consulta simple. Por lo tanto, este comando puede ser útil para probar el protocolo de consulta extendida desde psql.

\conninfo #

Muestra información sobre la conexión actual a la base de datos, incluyendo información relacionada con SSL si SSL está en uso.

Ten en cuenta que el campo Client User (usuario del cliente) muestra el usuario en el momento de la conexión, mientras que el campo Superuser (superusuario) indica si el usuario actual (en el contexto de ejecución actual) tiene privilegios de superusuario. Estos usuarios suelen ser el mismo, pero pueden diferir, por ejemplo, si el usuario actual se cambió con el comando SET ROLE.

\copy { table [ ( column_list ) ] } from { 'filename' | program 'command' | stdin | pstdin } [ [ with ] ( option [, ...] ) ] [ where condition ]
\copy { table [ ( column_list ) ] | ( query ) } to { 'filename' | program 'command' | stdout | pstdout } [ [ with ] ( option [, ...] ) ] #

Realiza una copia en el frontend (cliente). Esta es una operación que ejecuta un comando SQL COPY, pero en lugar de que el servidor lea o escriba el archivo especificado, psql lee o escribe el archivo y dirige los datos entre el servidor y el sistema de archivos local. Esto significa que la accesibilidad del archivo y los privilegios son los del usuario local, no los del servidor, y no se requieren privilegios de superusuario de SQL.

Cuando se especifica program, command es ejecutado por psql y los datos pasados desde o hacia command son dirigidos entre el servidor y el cliente. Nuevamente, los privilegios de ejecución son los del usuario local, no los del servidor, y no se requieren privilegios de superusuario de SQL.

Para \copy ... from stdin, las filas de datos se leen desde la misma fuente que emitió el comando, continuando hasta que se lea una línea que contenga solo \. o la transmisión alcance el EOF (fin de archivo). Esta opción es útil para rellenar tablas en línea dentro de un archivo de script SQL. Para \copy ... to stdout, la salida se envía al mismo lugar que la salida del comando de psql, y no se imprime el estado del comando COPY count (ya que podría confundirse con una fila de datos). Para leer/escribir la entrada o salida estándar de psql independientemente de la fuente del comando actual o de la opción \o, escribe from pstdin o to pstdout.

La sintaxis de este comando es similar a la del comando SQL COPY. Todas las opciones distintas del origen/destino de los datos son las especificadas para COPY. Debido a esto, se aplican reglas de análisis especiales al metacomando \copy. A diferencia de la mayoría de los demás metacomandos, todo el resto de la línea se toma siempre como los argumentos de \copy, y no se realiza ni la interpolación de variables ni la expansión de comillas invertidas en los argumentos.

Tip

Otra forma de obtener el mismo resultado que \copy ... to es utilizar el comando SQL COPY ... TO STDOUT y finalizarlo con \g filename o \g |program. A diferencia de \copy, este método permite que el comando abarque varias líneas; además, se puede utilizar la interpolación de variables y la expansión de comillas invertidas.

Tip

Estas operaciones no son tan eficientes como el comando SQL COPY con un origen o destino de datos de archivo o programa, porque todos los datos deben pasar a través de la conexión cliente/servidor. Para grandes cantidades de datos, el comando SQL podría ser preferible.

Muestra los términos de derechos de autor (copyright) y distribución de PostgreSQL.

\crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ] #

Ejecuta el búfer de consulta actual (como \g) y muestra los resultados en una cuadrícula de tabla de referencias cruzadas (crosstab). La consulta debe devolver al menos tres columnas. La columna de salida identificada por colV se convierte en una cabecera vertical y la columna de salida identificada por colH se convierte en una cabecera horizontal. colD identifica la columna de salida a mostrar dentro de la cuadrícula. sortcolH identifica una columna de ordenación opcional para la cabecera horizontal.

Cada especificación de columna puede ser un número de columna (empezando por 1) o un nombre de columna. Se aplican las reglas habituales de SQL de conversión de mayúsculas/minúsculas y entrecomillado a los nombres de las columnas. Si se omite, colV se toma como la columna 1 y colH como la columna 2. colH debe ser diferente de colV. Si no se especifica colD, entonces debe haber exactamente tres columnas en el resultado de la consulta, y la columna que no sea ni colV ni colH se tomará como colD.

La cabecera vertical, que se muestra como la columna más a la izquierda, contiene los valores encontrados en la columna colV, en el mismo orden que en los resultados de la consulta, pero eliminando los duplicados.

La cabecera horizontal, que se muestra como la primera fila, contiene los valores encontrados en la columna colH, eliminando los duplicados. Por defecto, estos aparecen en el mismo orden que en los resultados de la consulta. Pero si se proporciona el argumento opcional sortcolH, este identifica una columna cuyos valores deben ser números enteros, y los valores de colH aparecerán en la cabecera horizontal ordenados según los valores de sortcolH correspondientes.

Dentro de la cuadrícula de referencias cruzadas, para cada valor distinto x de colH y cada valor distinto y de colV, la celda situada en la intersección (x,y) contiene el valor de la columna colD en la fila del resultado de la consulta para la cual el valor de colH es x y el valor de colV es y. Si no existe tal fila, la celda queda vacía. Si hay varias filas de este tipo, se informa de un error.

\d[Sx+] [ pattern ] #

Para cada relación (tabla, vista, vista materializada, índice, secuencia o tabla externa) o tipo compuesto que coincida con el pattern, muestra todas las columnas, sus tipos, el tablespace (si no es el predeterminado) y cualquier atributo especial como NOT NULL o valores predeterminados. También se muestran los índices, restricciones, reglas y disparadores (triggers) asociados. Para las tablas externas, también se muestra el servidor externo asociado. (Coincidir con el patrón se define en Patterns más adelante).

Para algunos tipos de relación, \d muestra información adicional para cada columna: valores de columna para secuencias, expresiones indexadas para índices y opciones de envoltura de datos externos (foreign data wrapper) para tablas externas.

La forma del comando \d+ es idéntica, excepto que se muestra más información: se muestran los comentarios asociados a las columnas de la tabla, así como la presencia de OID en la tabla, la definición de la vista si la relación es una vista, una configuración de identidad de réplica que no sea la predeterminada y el nombre del método de acceso si la relación tiene un método de acceso.

Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema.

Note

Si se utiliza \d sin un argumento de pattern, equivale a \dtvmsE, que mostrará una lista de todas las tablas, vistas, vistas materializadas, secuencias y tablas externas visibles. Esto es puramente una medida de conveniencia.

Al igual que con muchos otros comandos, si se añade x al nombre del comando, los resultados se muestran en modo expandido, pero ten en cuenta que esto solo se aplica cuando se utiliza \d sin un argumento de pattern, y el modificador x no puede aparecer inmediatamente después de la \d (porque \dx es un comando diferente); el modificador x solo puede aparecer después de un modificador S o +. Por ejemplo, \d+x equivale a \dtvmsE+x y mostrará una lista de todas las relaciones en modo expandido.

\da[Sx] [ pattern ] #

Muestra una lista de las funciones de agregación, junto con su tipo de retorno y los tipos de datos sobre los que operan. Si se especifica pattern, solo se muestran las agregaciones cuyos nombres coincidan con el patrón. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido.

\dA[x+] [ pattern ] #

Muestra una lista de los métodos de acceso. Si se especifica pattern, solo se muestran los métodos de acceso cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada método de acceso se muestra con su función de controlador (handler) asociada y su descripción.

\dAc[x+] [access-method-pattern [input-type-pattern]] #

Muestra una lista de las clases de operadores (consulta Section 36.16.1). Si se especifica access-method-pattern, solo se listan las clases de operadores asociadas con métodos de acceso cuyos nombres coincidan con ese patrón. Si se especifica input-type-pattern, solo se listan las clases de operadores asociadas con tipos de entrada cuyos nombres coincidan con ese patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada clase de operador se muestra con su familia de operadores asociada y su propietario.

\dAf[x+] [access-method-pattern [input-type-pattern]] #

Muestra una lista de las familias de operadores (consulta Section 36.16.5). Si se especifica access-method-pattern, solo se listan las familias de operadores asociadas con métodos de acceso cuyos nombres coincidan con ese patrón. Si se especifica input-type-pattern, solo se listan las familias de operadores asociadas con tipos de entrada cuyos nombres coincidan con ese patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada familia de operadores se muestra con su propietario.

\dAo[x+] [access-method-pattern [operator-family-pattern]] #

Muestra una lista de los operadores asociados con familias de operadores (consulta Section 36.16.2). Si se especifica access-method-pattern, solo se listan los miembros de las familias de operadores asociadas con métodos de acceso cuyos nombres coincidan con ese patrón. Si se especifica operator-family-pattern, solo se listan los miembros de las familias de operadores cuyos nombres coincidan con ese patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada operador se muestra con su familia de operadores de ordenación (si es un operador de ordenación), y si su función subyacente es a prueba de filtraciones (leakproof).

\dAp[x+] [access-method-pattern [operator-family-pattern]] #

Muestra una lista de las funciones de soporte asociadas con familias de operadores (consulta Section 36.16.3). Si se especifica access-method-pattern, solo se listan las funciones de las familias de operadores asociadas con métodos de acceso cuyos nombres coincidan con ese patrón. Si se especifica operator-family-pattern, solo se listan las funciones de las familias de operadores cuyos nombres coincidan con ese patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, las funciones se muestran con detalle, con sus listas de parámetros reales.

\db[x+] [ pattern ] #

Muestra una lista de los tablespaces. Si se especifica pattern, solo se muestran los tablespaces cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada tablespace se muestra con sus opciones asociadas, tamaño en disco, permisos y descripción.

\dc[Sx+] [ pattern ] #

Muestra una lista de las conversiones entre codificaciones de conjuntos de caracteres. Si se especifica pattern, solo se listan las conversiones cuyos nombres coincidan con el patrón. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada objeto se muestra con su descripción asociada.

\dconfig[x+] [ pattern ] #

Muestra una lista de los parámetros de configuración del servidor y sus valores. Si se especifica pattern, solo se listan los parámetros cuyos nombres coincidan con el patrón. Sin un pattern, solo se listan los parámetros que están configurados con valores no predeterminados. (Usa \dconfig * para ver todos los parámetros). Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada parámetro se lista con su tipo de datos, el contexto en el que se puede establecer el parámetro y los privilegios de acceso (si se han otorgado privilegios de acceso no predeterminados).

\dC[x+] [ pattern ] #

Muestra una lista de las conversiones de tipo (casts). Si se especifica pattern, solo se listan las conversiones cuyos tipos de origen o destino coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se muestra información adicional sobre cada conversión, incluyendo si su función subyacente es a prueba de filtraciones (leakproof) y la descripción de la conversión.

\dd[Sx] [ pattern ] #

Muestra las descripciones de los objetos de tipo constraint (restricción), operator class (clase de operador), operator family (familia de operadores), rule (regla) y trigger (disparador). Todos los demás comentarios se pueden ver mediante los comandos de barra invertida respectivos para esos tipos de objetos.

\dd muestra las descripciones de los objetos que coinciden con el pattern, o de los objetos visibles del tipo apropiado si no se proporciona ningún argumento. Pero en cualquier caso, solo se listan los objetos que tienen una descripción. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido.

Las descripciones de los objetos se pueden crear con el comando SQL COMMENT.

\dD[Sx+] [ pattern ] #

Muestra una lista de los dominios. Si se especifica pattern, solo se muestran los dominios cuyos nombres coincidan con el patrón. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada objeto se muestra con sus permisos asociados y su descripción.

\ddp[x] [ pattern ] #

Muestra una lista de las configuraciones de privilegios de acceso predeterminados. Se muestra una entrada para cada rol (y esquema, si corresponde) para el cual se han modificado los privilegios predeterminados a partir de los valores incorporados. Si se especifica pattern, solo se listan las entradas cuyo nombre de rol o nombre de esquema coincida con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido.

El comando ALTER DEFAULT PRIVILEGES se utiliza para establecer los privilegios de acceso predeterminados. El significado de la visualización de los privilegios se explica en Section 5.8.

\dE[Sx+] [ pattern ]
\di[Sx+] [ pattern ]
\dm[Sx+] [ pattern ]
\ds[Sx+] [ pattern ]
\dt[Sx+] [ pattern ]
\dv[Sx+] [ pattern ] #

En este grupo de comandos, las letras E, i, m, s, t y v representan tabla externa, índice, vista materializada, secuencia, tabla y vista, respectivamente. Puedes especificar cualquiera de estas letras, o todas ellas, en cualquier orden, para obtener una lista de objetos de estos tipos. Por ejemplo, \dti lista tablas e índices. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada objeto se muestra con su estado de persistencia (permanente, temporal o unlogged), su tamaño físico en disco y su descripción asociada si la hubiera. Si se especifica pattern, solo se listan los objetos cuyos nombres coincidan con el patrón. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema.

\des[x+] [ pattern ] #

Muestra una lista de los servidores externos (mnemónico: external servers). Si se especifica pattern, solo se listan aquellos servidores cuyo nombre coincida con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se muestra una descripción completa de cada servidor, incluyendo los privilegios de acceso del servidor, el tipo, la versión, las opciones y la descripción.

\det[x+] [ pattern ] #

Muestra una lista de las tablas externas (mnemónico: external tables). Si se especifica pattern, solo se listan las entradas cuyo nombre de tabla o de esquema coincida con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, también se muestran las opciones genéricas y la descripción de la tabla externa.

\deu[x+] [ pattern ] #

Muestra una lista de los mapeos de usuario (mnemónico: external users). Si se especifica pattern, solo se listan aquellos mapeos cuyos nombres de usuario coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se muestra información adicional sobre cada mapeo.

Caution

\deu+ también podría mostrar el nombre de usuario y la contraseña del usuario remoto, por lo que se debe tener cuidado de no divulgarlos.

\dew[x+] [ pattern ] #

Muestra una lista de las envolturas de datos externos (mnemónico: external wrappers). Si se especifica pattern, solo se listan aquellas envolturas cuyo nombre coincida con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, también se muestran los privilegios de acceso, las opciones y la descripción de la envoltura de datos externos.

\df[anptwSx+] [ pattern [ arg_pattern ... ] ] #

Muestra una lista de las funciones, junto con sus tipos de datos de resultado, tipos de datos de argumentos y tipos de funciones, que se clasifican como agg (agregación), normal, procedure (procedimiento), trigger (disparador) o window (ventana). Para mostrar solo funciones de tipo(s) específico(s), añade las letras correspondientes a, n, p, t o w al comando. Si se especifica pattern, solo se muestran las funciones cuyos nombres coincidan con el patrón. Cualquier argumento adicional son patrones de nombres de tipos, que se comparan con los nombres de tipos del primer, segundo y sucesivos argumentos de la función. (Las funciones coincidentes pueden tener más argumentos de los que especificas. Para evitarlo, escribe un guion - como último arg_pattern). Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se muestra información adicional sobre cada función, incluyendo la volatilidad, la seguridad en paralelo, el propietario, la clasificación de seguridad, si es a prueba de filtraciones, los privilegios de acceso, el lenguaje, el nombre interno (solo para funciones en C e internas) y la descripción. El código fuente de una función específica se puede ver mediante \sf.

\dF[x+] [ pattern ] #

Muestra una lista de las configuraciones de búsqueda de texto. Si se especifica pattern, solo se muestran las configuraciones cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se muestra una descripción completa de cada configuración, incluyendo el analizador (parser) de búsqueda de texto subyacente y la lista de diccionarios para cada tipo de token del analizador.

\dFd[x+] [ pattern ] #

Muestra una lista de los diccionarios de búsqueda de texto. Si se especifica pattern, solo se muestran los diccionarios cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se muestra información adicional sobre cada diccionario seleccionado, incluyendo la plantilla de búsqueda de texto subyacente y los valores de las opciones.

\dFp[x+] [ pattern ] #

Lists text search parsers. If pattern is specified, only parsers whose names match the pattern are shown. If x is appended to the command name, the results are displayed in expanded mode. If + is appended to the command name, a full description of each parser is shown, including the underlying functions and the list of recognized token types.

\dFt[x+] [ pattern ] #

Lists text search templates. If pattern is specified, only templates whose names match the pattern are shown. If x is appended to the command name, the results are displayed in expanded mode. If + is appended to the command name, additional information is shown about each template, including the underlying function names.

\dg[Sx+] [ pattern ] #

Lists database roles. (Since the concepts of users and groups have been unified into roles, this command is now equivalent to \du.) By default, only user-created roles are shown; supply the S modifier to include system roles. If pattern is specified, only those roles whose names match the pattern are listed. If x is appended to the command name, the results are displayed in expanded mode. If + is appended to the command name, additional information is shown about each role; currently this adds the comment for each role.

\dl[x+] #

This is an alias for \lo_list, which shows a list of large objects. If x is appended to the command name, the results are displayed in expanded mode. If + is appended to the command name, each large object is listed with its associated permissions, if any.

\dL[Sx+] [ pattern ] #

Muestra una lista de los lenguajes procedimentales. Si se especifica pattern, solo se listan los lenguajes cuyos nombres coincidan con el patrón. Por defecto, solo se muestran los lenguajes creados por el usuario; proporciona el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada lenguaje se lista con su manejador de llamadas, validador, privilegios de acceso y si es un objeto del sistema.

\dn[Sx+] [ pattern ] #

Muestra una lista de los esquemas (espacios de nombres). Si se especifica pattern, solo se listan los esquemas cuyos nombres coincidan con el patrón. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada objeto se lista con sus permisos asociados y su descripción, si la hubiera.

\do[Sx+] [ pattern [ arg_pattern [ arg_pattern ] ] ] #

Muestra una lista de los operadores con sus tipos de operandos y de resultados. Si se especifica pattern, solo se listan los operadores cuyos nombres coincidan con el patrón. Si se especifica un arg_pattern, solo se listan los operadores de prefijo cuyo nombre de tipo del argumento derecho coincida con el patrón. Si se especifican dos arg_patterns, solo se listan los operadores binarios cuyos nombres de tipo de argumentos coincidan con esos patrones. (Alternativamente, escribe - para el argumento no utilizado de un operador unario). Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se muestra información adicional sobre cada operador, incluyendo el nombre de la función subyacente y si es a prueba de filtraciones (leakproof).

\dO[Sx+] [ pattern ] #

Muestra una lista de las ordenaciones (collations). Si se especifica pattern, solo se listan las ordenaciones cuyos nombres coincidan con el patrón. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada ordenación se muestra con su descripción asociada, si la hubiera. Ten en cuenta que solo se muestran las ordenaciones utilizables con la codificación de la base de datos actual, por lo que los resultados pueden variar en diferentes bases de datos de la misma instalación.

\dp[Sx] [ pattern ] #

Muestra una lista de las tablas, vistas y secuencias con sus privilegios de acceso asociados. Si se especifica pattern, solo se listan las tablas, vistas y secuencias cuyos nombres coincidan con el patrón. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido.

Los comandos GRANT y REVOKE se utilizan para establecer los privilegios de acceso. El significado de la visualización de los privilegios se explica en Section 5.8.

\dP[itnx+] [ pattern ] #

Muestra una lista de las relaciones particionadas. Si se especifica pattern, solo se listan las entradas cuyo nombre coincida con el patrón. Se pueden añadir los modificadores t (tablas) e i (índices) al comando, filtrando la clase de relaciones a listar. Por defecto, se listan las tablas e índices particionados.

Si se utiliza el modificador n (nested [anidado]), o se especifica un patrón, entonces se incluyen las relaciones particionadas que no son raíz y se muestra una columna con el padre de cada relación particionada.

Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, también se muestra la suma de los tamaños de las particiones de cada relación, junto con la descripción de la relación. Si se combina n con +, se muestran dos tamaños: uno que incluye el tamaño total de las particiones hoja directamente adjuntas, y otro que muestra el tamaño total de todas las particiones, incluyendo las subparticiones adjuntas indirectamente.

\drds[x] [ role-pattern [ database-pattern ] ] #

Muestra una lista de las configuraciones definidas. Estas configuraciones pueden ser específicas de un rol, específicas de una base de datos o de ambos. role-pattern y database-pattern se utilizan para seleccionar los roles y bases de datos específicos a listar, respectivamente. Si se omiten, o si se especifica *, se listan todas las configuraciones, incluyendo las que no son específicas de roles o bases de datos, respectivamente. Si se añade x al nombre del comando, los resultados se muestran en modo expandido.

Los comandos ALTER ROLE y ALTER DATABASE se utilizan para definir configuraciones por rol y por base de datos.

\drg[Sx] [ pattern ] #

Muestra información sobre la pertenencia a cada rol otorgado, incluyendo las opciones asignadas (ADMIN, INHERIT y/o SET) y el otorgante. Consulta el comando GRANT para obtener información sobre la pertenencia a roles.

Por defecto, solo se muestran los otorgamientos a roles creados por el usuario; proporciona el modificador S para incluir los roles del sistema. Si se especifica pattern, solo se listan los otorgamientos a aquellos roles cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido.

\dRp[x+] [ pattern ] #

Muestra una lista de las publicaciones de replicación. Si se especifica pattern, solo se listan aquellas publicaciones cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, también se muestran las tablas y esquemas asociados a cada publicación.

\dRs[x+] [ pattern ] #

Muestra una lista de las suscripciones de replicación. Si se especifica pattern, solo se listan aquellas suscripciones cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se muestran propiedades adicionales de las suscripciones.

\dT[Sx+] [ pattern ] #

Muestra una lista de los tipos de datos. Si se especifica pattern, solo se listan los tipos cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada tipo se lista con su nombre interno y tamaño, sus valores permitidos si es un tipo enum, y sus permisos asociados. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir los objetos del sistema.

\du[Sx+] [ pattern ] #

Muestra una lista de los roles de la base de datos. (Dado que los conceptos de usuarios y grupos se han unificado en roles, este comando ahora es equivalente a \dg.) Por defecto, solo se muestran los roles creados por el usuario; proporciona el modificador S para incluir los roles del sistema. Si se especifica pattern, solo se listan aquellos roles cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se muestra información adicional sobre cada rol; actualmente, esto añade el comentario de cada rol.

\dx[x+] [ pattern ] #

Muestra una lista de las extensiones instaladas. Si se especifica pattern, solo se listan aquellas extensiones cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, se listan todos los objetos pertenecientes a cada extensión coincidente.

\dX[x] [ pattern ] #

Muestra una lista de las estadísticas extendidas. Si se especifica pattern, solo se listan aquellas estadísticas extendidas cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido.

El estado de cada tipo de estadísticas extendidas se muestra en una columna con el nombre de su tipo de estadística (por ejemplo, Ndistinct). defined significa que se solicitó al crear las estadísticas, y NULL significa que no se solicitó. Puedes utilizar pg_stats_ext si deseas saber si se ejecutó ANALYZE y si el planificador dispone de estadísticas.

\dy[x+] [ pattern ] #

Muestra una lista de los disparadores de eventos (event triggers). Si se especifica pattern, solo se listan aquellos disparadores de eventos cuyos nombres coincidan con el patrón. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada objeto se muestra con su descripción asociada.

\e or \edit [ filename ] [ line_number ] #

Si se especifica filename, se edita el archivo; después de salir del editor, el contenido del archivo se copia en el búfer de consulta actual. Si no se indica ningún filename, el búfer de consulta actual se copia en un archivo temporal que se edita de la misma manera. O bien, si el búfer de consulta actual está vacío, la consulta ejecutada más recientemente se copia a un archivo temporal y se edita de la misma manera.

Si editas un archivo o la consulta anterior, y sales del editor sin modificar el archivo, el búfer de consulta se borra. De lo contrario, los nuevos contenidos del búfer de consulta se vuelven a analizar de acuerdo con las reglas normales de psql, tratando todo el búfer como una sola línea. Cualquier consulta completa se ejecuta inmediatamente; es decir, si el búfer de consulta contiene o termina con un punto y coma, todo lo que esté antes de ese punto se ejecuta y se elimina del búfer de consulta. Lo que quede en el búfer de consulta se vuelve a mostrar. Escribe un punto y coma o \g para enviarlo, o \r para cancelarlo borrando el búfer de consulta.

Tratar el búfer como una sola línea afecta principalmente a los metacomandos: lo que quede en el búfer después de un metacomando se tomará como argumento(s) para el metacomando, incluso si abarca varias líneas. (Por lo tanto, no puedes crear scripts que utilicen metacomandos de esta manera. Utiliza \i para eso).

Si se especifica un número de línea, psql posicionará el cursor en la línea especificada del archivo o del búfer de consulta. Ten en cuenta que si se proporciona un solo argumento compuesto solo por dígitos, psql asume que es un número de línea, no un nombre de archivo.

Tip

Consulta Environment, más adelante, para saber cómo configurar y personalizar tu editor.

\echo text [ ... ] #

Imprime los argumentos evaluados en la salida estándar, separados por espacios y seguidos por una nueva línea. Esto puede ser útil para intercalar información en la salida de los scripts. Por ejemplo:

=> \echo `date`
Tue Oct 26 21:40:57 CEST 1999

Si el primer argumento es un -n sin comillas, no se escribe la nueva línea final (ni tampoco el primer argumento).

Tip

Si utilizas el comando \o para redireccionar la salida de tus consultas, es posible que prefieras usar \qecho en lugar de este comando. Consulta también \warn.

\ef [ function_description [ line_number ] ] #

Este comando recupera y edita la definición de la función o procedimiento indicado, en forma de un comando CREATE OR REPLACE FUNCTION o CREATE OR REPLACE PROCEDURE. La edición se realiza de la misma manera que para \edit. Si sales del editor sin guardar, la declaración se descarta. Si guardas y sales del editor, el comando actualizado se ejecuta inmediatamente si le añadiste un punto y coma. De lo contrario, se vuelve a mostrar; escribe un punto y coma o \g para enviarlo, o \r para cancelar.

La función de destino se puede especificar solo por su nombre, o por su nombre y argumentos, por ejemplo foo(integer, text). Se deben proporcionar los tipos de argumentos si existe más de una función con el mismo nombre.

Si no se especifica ninguna función, se presenta una plantilla en blanco de CREATE FUNCTION para su edición.

Si se especifica un número de línea, psql posicionará el cursor en la línea especificada del cuerpo de la función. (Ten en cuenta que el cuerpo de la función no suele comenzar en la primera línea del archivo).

A diferencia de la mayoría de los demás metacomandos, todo el resto de la línea se toma siempre como el/los argumento(s) de \ef, y no se realiza ni la interpolación de variables ni la expansión de comillas invertidas en los argumentos.

Tip

Consulta Environment, más adelante, para saber cómo configurar y personalizar tu editor.

\encoding [ encoding ] #

Establece la codificación del conjunto de caracteres del cliente. Sin un argumento, este comando muestra la codificación actual.

\errverbose #

Repite el mensaje de error del servidor más reciente con el máximo nivel de detalle, como si VERBOSITY estuviera establecido en verbose y SHOW_CONTEXT estuviera establecido en always.

\ev [ view_name [ line_number ] ] #

Este comando recupera y edita la definición de la vista indicada, en forma de un comando CREATE OR REPLACE VIEW. La edición se realiza de la misma manera que para \edit. Si sales del editor sin guardar, la declaración se descarta. Si guardas y sales del editor, el comando actualizado se ejecuta inmediatamente si le añadiste un punto y coma. De lo contrario, se vuelve a mostrar; escribe un punto y coma o \g para enviarlo, o \r para cancelar.

Si no se especifica ninguna vista, se presenta una plantilla en blanco de CREATE VIEW para su edición.

Si se especifica un número de línea, psql posicionará el cursor en la línea especificada de la definición de la vista.

A diferencia de la mayoría de los demás metacomandos, todo el resto de la línea se toma siempre como el/los argumento(s) de \ev, y no se realiza ni la interpolación de variables ni la expansión de comillas invertidas en los argumentos.

\f [ string ] #

Establece el separador de campos para la salida de consultas no alineada. El valor predeterminado es la barra vertical (|). Es equivalente a \pset fieldsep.

\g [ (option=value [...]) ] [ filename ]
\g [ (option=value [...]) ] [ |command ] #

Envía el búfer de consulta actual al servidor para su ejecución.

Si aparecen paréntesis después de \g, encierran una lista separada por espacios de cláusulas de opciones de formato option=value, que se interpretan de la misma manera que los comandos \pset option value, pero surten efecto solo durante la ejecución de esta consulta. En esta lista, no se permiten espacios alrededor de los signos =, pero se requieren entre las cláusulas de opciones. Si se omite =value, la opción nombrada option se cambia de la misma manera que para \pset option sin un value explícito.

Si se proporciona un argumento de filename o |command, la salida de la consulta se escribe en el archivo indicado o se dirige al comando de shell proporcionado, en lugar de mostrarse como es habitual. El archivo o comando se escribe solo si la consulta devuelve con éxito cero o más tuplas, no si la consulta falla o es un comando SQL que no devuelve datos.

Si el búfer de consulta actual está vacío, se vuelve a ejecutar la consulta enviada más recientemente. Excepto por ese comportamiento, \g sin argumentos es esencialmente equivalente a un punto y coma. Con argumentos, \g proporciona una alternativa de un solo uso (one-shot) al comando \o, y además permite ajustes de un solo uso de las opciones de formato de salida que normalmente se configuran mediante \pset.

Cuando el último argumento comienza con |, todo el resto de la línea se toma como el command a ejecutar, y no se realiza en él ni la interpolación de variables ni la expansión de comillas invertidas. El resto de la línea simplemente se pasa literalmente al shell.

\gdesc #

Muestra la descripción (es decir, los nombres de las columnas y los tipos de datos) del resultado del búfer de consulta actual. La consulta no se ejecuta realmente; sin embargo, si contiene algún tipo de error de sintaxis, ese error se notificará de la manera habitual.

Si el búfer de consulta actual está vacío, se describe en su lugar la consulta enviada más recientemente.

\getenv psql_var env_var #

Obtiene el valor de la variable de entorno env_var y lo asigna a la variable de psql psql_var. Si env_var no está definida en el entorno del proceso de psql, psql_var no se modifica. Ejemplo:

=> \getenv home HOME
=> \echo :home
/home/postgres
\gexec #

Envía el búfer de consulta actual al servidor, y luego trata cada columna de cada fila del resultado de la consulta (si lo hubiera) como una sentencia SQL a ejecutar. Por ejemplo, para crear un índice en cada columna de my_table:

=> SELECT format('create index on my_table(%I)', attname)
-> FROM pg_attribute
-> WHERE attrelid = 'my_table'::regclass AND attnum > 0
-> ORDER BY attnum
-> \gexec
CREATE INDEX
CREATE INDEX
CREATE INDEX
CREATE INDEX

Las consultas generadas se ejecutan en el orden en que se devuelven las filas, y de izquierda a derecha dentro de cada fila si hay más de una columna. Los campos NULL se ignoran. Las consultas generadas se envían literalmente al servidor para su procesamiento, por lo que no pueden ser metacomandos de psql ni contener referencias a variables de psql. Si alguna consulta individual falla, la ejecución de las consultas restantes continúa, a menos que ON_ERROR_STOP esté establecida. La ejecución de cada consulta está sujeta al procesamiento de ECHO. (A menudo es aconsejable establecer ECHO en all o queries cuando se utiliza \gexec). El registro de consultas, el modo de paso único, el tiempo de ejecución (timing) y otras características de ejecución de consultas también se aplican a cada consulta generada.

Si el búfer de consulta actual está vacío, se vuelve a ejecutar la consulta enviada más recientemente.

\gset [ prefix ] #

Envía el búfer de consulta actual al servidor y almacena el resultado de la consulta en variables de psql (consulta Variables más adelante). La consulta a ejecutar debe devolver exactamente una fila. Cada columna de la fila se almacena en una variable independiente, con el mismo nombre que la columna. Por ejemplo:

=> SELECT 'hello' AS var1, 10 AS var2
-> \gset
=> \echo :var1 :var2
hello 10

Si especificas un prefix, esa cadena se antepone a los nombres de las columnas de la consulta para crear los nombres de las variables a utilizar:

=> SELECT 'hello' AS var1, 10 AS var2
-> \gset result_
=> \echo :result_var1 :result_var2
hello 10

Si el resultado de una columna es NULL, la variable correspondiente se elimina (unset) en lugar de establecerse.

Si la consulta falla o no devuelve una fila, no se modifica ninguna variable.

Si el búfer de consulta actual está vacío, se vuelve a ejecutar en su lugar la consulta enviada más recientemente.

\gx [ (option=value [...]) ] [ filename ]
\gx [ (option=value [...]) ] [ |command ] #

\gx es equivalente a \g, excepto que fuerza el modo de salida expandido para esta consulta, como si se hubiera incluido expanded=on en la lista de opciones de \pset. Consulta también \x.

\h or \help [ command ] #

Ofrece ayuda sobre la sintaxis del comando SQL especificado. Si no se especifica command, entonces psql listará todos los comandos para los que hay ayuda sintáctica disponible. Si command es un asterisco (*), se muestra la ayuda de sintaxis de todos los comandos SQL.

A diferencia de la mayoría de los demás metacomandos, todo el resto de la línea se toma siempre como el/los argumento(s) de \help, y no se realiza ni la interpolación de variables ni la expansión de comillas invertidas en los argumentos.

Note

Para simplificar la escritura, los comandos que constan de varias palabras no tienen que estar entrecomillados. Por lo tanto, es correcto escribir \help alter table.

\H or \html #

Activa el formato de salida de consultas en HTML. Si el formato HTML ya está activado, se vuelve al formato predeterminado de texto alineado. Este comando existe por motivos de compatibilidad y conveniencia, pero consulta \pset para configurar otras opciones de salida.

\i or \include filename #

Lee la entrada desde el archivo filename y la ejecuta como si se hubiera introducido desde el teclado.

Si filename es - (guion), se lee la entrada estándar hasta una indicación de EOF o el metacomando \q. Esto se puede utilizar para intercalar la entrada interactiva con la entrada de archivos. Ten en cuenta que el comportamiento de Readline se utilizará solo si está activo en el nivel más externo.

Note

Si deseas ver las líneas en la pantalla a medida que se leen, debes establecer la variable ECHO en all.

\if expression
\elif expression
\else
\endif #

expression yields true then processing continues normally; otherwise, lines are skipped until a matching \elif, \else, or \endif is reached. Once an \if or \elif test has succeeded, the arguments of later \elif commands in the same block are not evaluated but are treated as false. Lines following an \else are processed only if no earlier matching \if or \elif succeeded.

The expression argument of an \if or \elif command is subject to variable interpolation and backquote expansion, just like any other backslash command argument. After that it is evaluated like the value of an on/off option variable. So a valid value is any unambiguous case-insensitive match for one of: true, false, 1, 0, on, off, yes, no. For example, t, T, and tR will all be considered to be true.

Expressions that do not properly evaluate to true or false will generate a warning and be treated as false.

Lines being skipped are parsed normally to identify queries and backslash commands, but queries are not sent to the server, and backslash commands other than conditionals (\if, \elif, \else, \endif) are ignored. Conditional commands are checked only for valid nesting. Variable references in skipped lines are not expanded, and backquote expansion is not performed either.

All the backslash commands of a given conditional block must appear in the same source file. If EOF is reached on the main input file or an \include-ed file before all local \if-blocks have been closed, then psql will raise an error.

Here is an example:

-- check for the existence of two separate records in the database and store
-- the results in separate psql variables
SELECT
    EXISTS(SELECT 1 FROM customer WHERE customer_id = 123) as is_customer,
    EXISTS(SELECT 1 FROM employee WHERE employee_id = 456) as is_employee
\gset
\if :is_customer
    SELECT * FROM customer WHERE customer_id = 123;
\elif :is_employee
    \echo 'is not a customer but is an employee'
    SELECT * FROM employee WHERE employee_id = 456;
\else
    \if yes
        \echo 'not a customer or employee'
    \else
        \echo 'this will never print'
    \endif
\endif
\ir or \include_relative filename #

The \ir command is similar to \i, but resolves relative file names differently. When executing in interactive mode, the two commands behave identically. However, when invoked from a script, \ir interprets file names relative to the directory in which the script is located, rather than the current working directory.

\l[x+] or \list[x+] [ pattern ] #

List the databases in the server and show their names, owners, character set encodings, and access privileges. If pattern is specified, only databases whose names match the pattern are listed. If x is appended to the command name, the results are displayed in expanded mode. If + is appended to the command name, database sizes, default tablespaces, and descriptions are also displayed. (Size information is only available for databases that the current user can connect to.)

\lo_export loid filename #

Lee el objeto grande con OID loid de la base de datos y lo escribe en filename. Ten en cuenta que esto es sutilmente diferente de la función del servidor lo_export, que actúa con los permisos del usuario con el que se ejecuta el servidor de la base de datos y en el sistema de archivos del servidor.

Tip

Usa \lo_list para averiguar el OID del objeto grande.

\lo_import filename [ comment ] #

Almacena el archivo en un objeto grande (large object) de PostgreSQL. Opcionalmente, asocia el comentario proporcionado con el objeto. Ejemplo:

foo=> \lo_import '/home/peter/pictures/photo.xcf' 'a picture of me'
lo_import 152801

La respuesta indica que el objeto grande recibió el ID de objeto 152801, el cual puede utilizarse para acceder al objeto grande recién creado en el futuro. Por motivos de legibilidad, se recomienda asociar siempre un comentario legible por humanos con cada objeto. Tanto los OID como los comentarios se pueden ver con el comando \lo_list.

Ten en cuenta que este comando es sutilmente diferente de la función del lado del servidor lo_import porque actúa como el usuario local en el sistema de archivos local, en lugar del usuario y el sistema de archivos del servidor.

\lo_list[x+] #

Muestra una lista de todos los objetos grandes de PostgreSQL almacenados actualmente en la base de datos, junto con los comentarios proporcionados para ellos. Si se añade x al nombre del comando, los resultados se muestran en modo expandido. Si se añade + al nombre del comando, cada objeto grande se lista con sus permisos asociados, si los hubiera.

Elimina el objeto grande con el OID loid de la base de datos.

Tip

Usa \lo_list para averiguar el OID del objeto grande.

\o or \out [ filename ]
\o or \out [ |command ] #

Organiza guardar los resultados de consultas futuras en el archivo filename o redirigir los resultados futuros al comando de shell command. Si no se especifica ningún argumento, la salida de la consulta se restablece a la salida estándar.

Si el argumento comienza con |, entonces todo el resto de la línea se toma como el command a ejecutar, y no se realiza en él ni la interpolación de variables ni la expansión de comillas invertidas. El resto de la línea simplemente se pasa literalmente al shell.

Los resultados de la consulta incluyen todas las tablas, respuestas de comandos y notificaciones obtenidas del servidor de la base de datos, así como la salida de varios comandos de barra invertida que realizan consultas en la base de datos (como \d); pero no los mensajes de error.

Tip

Para intercalar la salida de texto entre los resultados de la consulta, usa \qecho.

\p or \print #

Imprime el búfer de consulta actual en la salida estándar. Si el búfer de consulta actual está vacío, se imprime la consulta ejecutada más recientemente.

\parse statement_name #

Crea una sentencia preparada a partir del búfer de consulta actual, basándose en el nombre de un objeto de sentencia preparada de destino. Una cadena vacía denota la sentencia preparada sin nombre.

Ejemplo:

SELECT $1 \parse stmt1

Este comando hace que se utilice el protocolo de consulta extendida, a diferencia del funcionamiento normal de psql, que utiliza el protocolo de consulta simple. Este comando emitirá un mensaje Parse (F), por lo que puede ser útil para probar el protocolo de consulta extendida desde psql. Este comando afecta solo a la siguiente consulta ejecutada; todas las consultas posteriores utilizarán el protocolo de consulta simple por defecto.

\password [ username ] #

Cambia la contraseña del usuario especificado (por defecto, el usuario actual). Este comando solicita la nueva contraseña, la cifra y la envía al servidor como un comando ALTER ROLE. Esto asegura que la nueva contraseña no aparezca en texto claro en el historial de comandos, en el registro del servidor ni en ningún otro lugar.

\prompt [ text ] name #

Solicita al usuario que proporcione texto, que se asigna a la variable name. Se puede especificar una cadena de solicitud opcional, text. (Para solicitudes de varias palabras, encierra el texto entre comillas simples).

Por defecto, \prompt utiliza la terminal para la entrada y la salida. Sin embargo, si se utilizó el interruptor de línea de comandos -f, \prompt utiliza la entrada y la salida estándar.

\pset [ option [ value ] ] #

Este comando establece opciones que afectan a la salida de las tablas de resultados de las consultas. option indica qué opción se va a establecer. La semántica de value varía según la opción seleccionada. Para algunas opciones, omitir value hace que la opción se alterne (toggle) o se elimine (unset), tal y como se describe en la opción en particular. Si no se menciona tal comportamiento, entonces omitir value simplemente hace que se muestre la configuración actual.

\pset sin ningún argumento muestra el estado actual de todas las opciones de impresión.

Las opciones de impresión ajustables son:

border #

El value debe ser un número. En general, cuanto mayor sea el número, más bordes y líneas tendrán las tablas, pero los detalles dependen del formato en particular. En el formato HTML, esto se traducirá directamente en el atributo border=.... En la mayoría de los demás formatos, solo tienen sentido los valores 0 (sin borde), 1 (líneas divisorias internas) y 2 (marco de la tabla), y los valores superiores a 2 se tratarán de la misma manera que border = 2. Los formatos latex y latex-longtable permiten además un valor de 3 para añadir líneas divisorias entre las filas de datos.

columns #

Establece el ancho de destino para el formato wrapped, y también el límite de ancho para determinar si la salida es lo suficientemente ancha como para requerir el paginador o cambiar a la visualización vertical en el modo automático expandido. El valor cero (el predeterminado) hace que el ancho de destino esté controlado por la variable de entorno COLUMNS, o por el ancho de pantalla detectado si COLUMNS no está establecida. Además, si columns es cero, el formato wrapped solo afecta a la salida de pantalla. Si columns es distinto de cero, la salida de archivos y de tuberías (pipes) también se ajustará a ese ancho.

csv_fieldsep #

Especifica el separador de campos que se utilizará en el formato de salida CSV. Si el carácter separador aparece en el valor de un campo, ese campo se genera entre comillas dobles, siguiendo las reglas estándar de CSV. El valor predeterminado es una coma.

expanded (or x) #

Si se especifica value, debe ser on u off, lo cual activará o desactivará el modo expandido, o bien auto. Si se omite value, el comando alterna entre la configuración activada y desactivada. Cuando el modo expandido está activado, los resultados de la consulta se muestran en dos columnas, con el nombre de la columna a la izquierda y los datos a la derecha. Este modo es útil si los datos no caben en la pantalla en el modo normal horizontal. En la configuración automática, el modo expandido se utiliza siempre que la salida de la consulta tiene más de una columna y es más ancha que la pantalla; de lo contrario, se utiliza el modo normal. La configuración automática solo es efectiva en los formatos alineados y ajustados (wrapped). En otros formatos, siempre se comporta como si el modo expandido estuviera desactivado.

fieldsep #

Especifica el separador de campos que se utilizará en el formato de salida no alineado. De este modo, se puede crear, por ejemplo, una salida separada por tabuladores, que otros programas podrían preferir. Para establecer un tabulador como separador de campos, escribe \pset fieldsep '\t'. El separador de campos predeterminado es '|' (una barra vertical).

fieldsep_zero #

Establece el separador de campos a utilizar en el formato de salida no alineado en un byte cero.

Si se especifica value, debe ser on u off, lo cual activará o desactivará la visualización del pie de página de la tabla (el recuento de (n filas)). Si se omite value, el comando alterna la visualización del pie de página entre activada y desactivada.

format #

Establece el formato de salida en uno de los siguientes: aligned, asciidoc, csv, html, latex, latex-longtable, troff-ms, unaligned o wrapped. Se permiten abreviaturas únicas.

El formato aligned es la salida de texto estándar, legible por humanos y con un formato agradable; este es el predeterminado.

El formato unaligned escribe todas las columnas de una fila en una línea, separadas por el separador de campos actualmente activo. Esto es útil para crear salidas que puedan ser leídas por otros programas, por ejemplo, formato separado por tabuladores o por comas. Sin embargo, el carácter separador de campos no se trata de manera especial si aparece en el valor de una columna; por lo que el formato CSV puede ser más adecuado para tales fines.

El formato csv escribe los valores de las columnas separados por comas, aplicando las reglas de entrecomillado descritas en RFC 4180. Esta salida es compatible con el formato CSV del comando COPY del servidor. Se genera una línea de cabecera con los nombres de las columnas, a menos que el parámetro tuples_only sea on. No se imprimen títulos ni pies de página. Cada fila finaliza con el carácter de fin de línea dependiente del sistema, que suele ser una única nueva línea (\n) para los sistemas tipo Unix o una secuencia de retorno de carro y nueva línea (\r\n) para Microsoft Windows. Se pueden seleccionar otros caracteres de separación de campos distintos de la coma con \pset csv_fieldsep.

El formato wrapped es similar a aligned, pero ajusta los valores de datos anchos entre líneas para que la salida se adapte al ancho de la columna de destino. El ancho de destino se determina tal y como se describe en la opción columns. Ten en cuenta que psql no intentará ajustar los títulos de las cabeceras de las columnas; por lo tanto, el formato wrapped se comporta de la misma manera que aligned si el ancho total necesario para las cabeceras de las columnas supera el destino.

Los formatos asciidoc, html, latex, latex-longtable y troff-ms generan tablas destinadas a ser incluidas en documentos que utilicen el lenguaje de marcado correspondiente. ¡No son documentos completos! Puede que esto no sea necesario en HTML, pero en LaTeX debes tener un contenedor de documento completo. El formato latex utiliza el entorno tabular de LaTeX. El formato latex-longtable requiere los paquetes longtable y booktabs de LaTeX.

linestyle #

Establece el estilo de dibujo de las líneas de borde en uno de los siguientes: ascii, old-ascii o unicode. Se permiten abreviaturas únicas. (Eso significaría que una letra es suficiente). La configuración predeterminada es ascii. Esta opción solo afecta a los formatos de salida aligned y wrapped.

El estilo ascii utiliza caracteres ASCII simples. Las nuevas líneas en los datos se muestran mediante un símbolo + en el margen derecho. Cuando el formato wrapped ajusta los datos de una línea a la siguiente sin un carácter de nueva línea, se muestra un punto (.) en el margen derecho de la primera línea, y de nuevo en el margen izquierdo de la línea siguiente.

El estilo old-ascii utiliza caracteres ASCII simples, empleando el estilo de formato utilizado en PostgreSQL 8.4 y versiones anteriores. Las nuevas líneas en los datos se muestran mediante un símbolo : en lugar del separador de la columna izquierda. Cuando los datos se ajustan de una línea a la siguiente sin un carácter de nueva línea, se utiliza un símbolo ; en lugar del separador de la columna izquierda.

El estilo unicode utiliza caracteres Unicode de dibujo de cajas. Las nuevas líneas en los datos se muestran mediante un símbolo de retorno de carro en el margen derecho. Cuando los datos se ajustan de una línea a la siguiente sin un carácter de nueva línea, se muestra un símbolo de puntos suspensivos en el margen derecho de la primera línea, y de nuevo en el margen izquierdo de la línea siguiente.

Cuando la configuración de border es superior a cero, la opción linestyle también determina los caracteres con los que se dibujan las líneas de borde. Los caracteres ASCII simples funcionan en todas partes, pero los caracteres Unicode se ven mejor en pantallas que los reconocen.

null #

Establece la cadena que se imprimirá en lugar de un valor nulo. Lo predeterminado es no imprimir nada, lo cual puede confundirse fácilmente con una cadena vacía. Por ejemplo, se podría preferir \pset null '(null)'.

numericlocale #

Si se especifica value, debe ser on u off, lo cual activará o desactivará la visualización de un carácter específico de la configuración regional para separar grupos de dígitos a la izquierda del marcador decimal. Si se omite value, el comando alterna entre la salida numérica regular y la específica de la configuración regional.

pager #

Controla el uso de un programa paginador para la salida de ayuda de consultas y de psql. Cuando la opción pager es off, no se utiliza el programa paginador. Cuando la opción pager es on, el paginador se utiliza cuando es apropiado, es decir, cuando la salida se dirige a una terminal y no cabe en la pantalla. La opción pager también se puede establecer en always, lo que hace que el paginador se utilice para toda la salida de la terminal, independientemente de si cabe en la pantalla. \pset pager sin un value alterna el uso del paginador entre activado y desactivado.

Si la variable de entorno PSQL_PAGER o PAGER está establecida, la salida a paginar se dirige al programa especificado. De lo contrario, se utiliza un programa predeterminado dependiente de la plataforma (como more).

Cuando se utiliza el comando \watch para ejecutar una consulta repetidamente, la variable de entorno PSQL_WATCH_PAGER se utiliza en su lugar para encontrar el programa paginador en sistemas Unix. Esto se configura por separado porque puede confundir a los paginadores tradicionales, pero se puede utilizar para enviar la salida a herramientas que entiendan el formato de salida de psql (como pspg --stream).

pager_min_lines #

Si pager_min_lines se establece en un número mayor que la altura de la página, el programa paginador no se llamará a menos que haya al menos esta cantidad de líneas de salida para mostrar. La configuración predeterminada es 0.

recordsep #

Especifica el separador de registros (líneas) a utilizar en el formato de salida no alineado. El valor predeterminado es un carácter de nueva línea.

recordsep_zero #

Establece el separador de registros a utilizar en el formato de salida no alineado en un byte cero.

tableattr (or T) #

En el formato HTML, esto especifica los atributos que se colocarán dentro de la etiqueta table. Podría ser, por ejemplo, cellpadding o bgcolor. Ten en cuenta que probablemente no querrás especificar border aquí, ya que de eso ya se encarga \pset border. Si no se proporciona ningún value, se eliminan los atributos de la tabla.

En el formato latex-longtable, esto controla el ancho proporcional de cada columna que contenga un tipo de datos alineado a la izquierda. Se especifica como una lista de valores separados por espacios en blanco, por ejemplo, '0.2 0.2 0.6'. Las columnas de salida no especificadas utilizan el último valor especificado.

title (or C) #

Establece el título de la tabla para cualquier tabla que se imprima posteriormente. Esto se puede utilizar para dar a su salida etiquetas descriptivas. Si no se proporciona ningún value, se elimina el título.

tuples_only (or t) #

Si se especifica value, debe ser on u off, lo cual activará o desactivará el modo de solo tuplas. Si se omite el value, el comando alterna entre la salida regular y la de solo tuplas. La salida regular incluye información adicional como cabeceras de columnas, títulos y varios pies de página. En el modo de solo tuplas, solo se muestran los datos reales de la tabla.

unicode_border_linestyle #

Establece el estilo de dibujo de bordes para el estilo de línea unicode en single (simple) o double (doble).

unicode_column_linestyle #

Establece el estilo de dibujo de columnas para el estilo de línea unicode en single (simple) o double (doble).

unicode_header_linestyle #

Establece el estilo de dibujo de cabeceras para el estilo de línea unicode en single (simple) o double (doble).

xheader_width #

Establece el ancho máximo de la cabecera para la salida expandida en uno de los siguientes: full (el valor predeterminado), column, page o un integer value (valor entero).

full: la cabecera expandida no se trunca y será tan ancha como la línea de salida más ancha.

column: trunca la línea de cabecera al ancho de la primera columna.

page: trunca la línea de cabecera al ancho de la terminal.

integer value: especifica el ancho máximo exacto de la línea de cabecera.

Se pueden ver ilustraciones de cómo lucen estos diferentes formatos en Examples, más adelante.

Tip

Existen varios comandos de acceso directo para \pset. Consulta \a, \C, \f, \H, \t, \T y \x.

\q or \quit #

Sale del programa psql. En un archivo de script, solo se finaliza la ejecución de ese script.

\qecho text [ ... ] #

Este comando es idéntico a \echo, excepto que la salida se escribirá en el canal de salida de consultas, tal y como se establece mediante \o.

\r or \reset #

Restablece (borra) el búfer de consulta.

\restrict restrict_key #

Entra en modo "restringido" con la clave proporcionada. En este modo, el único metacomando permitido es \unrestrict, para salir del modo restringido. La clave solo puede contener caracteres alfanuméricos.

Este comando está destinado principalmente a su uso en volcados (dumps) de texto plano generados por pg_dump, pg_dumpall y pg_restore, pero puede ser útil en otros casos.

\s [ filename ] #

Imprime el historial de la línea de comandos de psql en filename. Si se omite filename, el historial se escribe en la salida estándar (utilizando el paginador si es apropiado). Este comando no está disponible si psql se compiló sin soporte para Readline.

\set [ name [ value [ ... ] ] ] #

Establece la variable de psql name a value, o si se proporciona más de un valor, a la concatenación de todos ellos. Si solo se proporciona un argumento, la variable se establece a un valor de cadena vacía. Para eliminar una variable, usa el comando \unset.

\set sin argumentos muestra los nombres y valores de todas las variables de psql actualmente establecidas.

Los nombres de variables válidos pueden contener letras, dígitos y guiones bajos. Consulta Variables más adelante para obtener detalles. Los nombres de variables distinguen entre mayúsculas y minúsculas.

Ciertas variables son especiales, ya que controlan el comportamiento de psql o se establecen de forma automática para reflejar el estado de la conexión. Estas variables están documentadas en Variables, más adelante.

Note

Este comando no tiene relación con el comando SQL SET.

\setenv name [ value ] #

Establece la variable de entorno name a value, o si no se proporciona el value, elimina la variable de entorno. Ejemplo:

testdb=> \setenv PAGER less
testdb=> \setenv LESS -imx4F
\sf[+] function_description #

This command fetches and shows the definition of the named function or procedure, in the form of a CREATE OR REPLACE FUNCTION or CREATE OR REPLACE PROCEDURE command. The definition is printed to the current query output channel, as set by \o.

The target function can be specified by name alone, or by name and arguments, for example foo(integer, text). The argument types must be given if there is more than one function of the same name.

If + is appended to the command name, then the output lines are numbered, with the first line of the function body being line 1.

Unlike most other meta-commands, the entire remainder of the line is always taken to be the argument(s) of \sf, and neither variable interpolation nor backquote expansion are performed in the arguments.

\sv[+] view_name #

This command fetches and shows the definition of the named view, in the form of a CREATE OR REPLACE VIEW command. The definition is printed to the current query output channel, as set by \o.

If + is appended to the command name, then the output lines are numbered from 1.

Unlike most other meta-commands, the entire remainder of the line is always taken to be the argument(s) of \sv, and neither variable interpolation nor backquote expansion are performed in the arguments.

\startpipeline
\sendpipeline
\syncpipeline
\endpipeline
\flushrequest
\flush
\getresults [ number_results ] #

This group of commands implements pipelining of SQL statements. A pipeline must begin with a \startpipeline and end with an \endpipeline. In between there may be any number of \syncpipeline commands, which sends a sync message without ending the ongoing pipeline and flushing the send buffer. In pipeline mode, statements are sent to the server without waiting for the results of previous statements. See Section 32.5 for more details.

All queries executed while a pipeline is ongoing use the extended query protocol. Queries are appended to the pipeline when ending with a semicolon. The meta-commands \bind, \bind_named, \close_prepared or \parse can be used in an ongoing pipeline. While a pipeline is ongoing, \sendpipeline will append the current query buffer to the pipeline. Other meta-commands like \g, \gx or \gdesc are not allowed in pipeline mode.

\flushrequest appends a flush command to the pipeline, allowing to read results with \getresults without issuing a sync or ending the pipeline. \getresults will automatically push unsent data to the server. \flush can be used to manually push unsent data.

\getresults accepts an optional number_results parameter. If provided, only the first number_results pending results will be read. If not provided or 0, all pending results are read.

When pipeline mode is active, a dedicated prompt variable is available to report the pipeline status. See %P for more details

COPY is not supported while in pipeline mode.

Example:

\startpipeline
SELECT * FROM pg_class;
SELECT 1 \bind \sendpipeline
\flushrequest
\getresults
\endpipeline

\t #

Alterna la visualización de los encabezados de nombre de columna de salida y del pie de página del recuento de filas. Este comando es equivalente a \pset tuples_only y se proporciona por conveniencia.

\T table_options #

Especifica los atributos que se colocarán dentro de la etiqueta table en el formato de salida HTML. Este comando es equivalente a \pset tableattr table_options.

\timing [ on | off ] #

Con un parámetro, activa o desactiva la visualización de cuánto tiempo tarda cada sentencia SQL. Sin un parámetro, alterna la visualización entre activado y desactivado. La visualización se realiza en milisegundos; los intervalos superiores a 1 segundo también se muestran en formato minutos:segundos, añadiéndose campos de horas y días si es necesario.

\unrestrict restrict_key #

Sale del modo «restringido» (es decir, donde todos los demás metacomandos están bloqueados), siempre que la clave especificada coincida con la proporcionada a \restrict cuando se ingresó al modo restringido.

Este comando está destinado principalmente a su uso en volcados de texto plano generados por pg_dump, pg_dumpall y pg_restore, pero puede ser útil en otros lugares.

\unset name #

Elimina (borra) la variable de psql name.

La mayoría de las variables que controlan el comportamiento de psql no se pueden eliminar; en su lugar, un comando \unset se interpreta como el restablecimiento de sus valores por defecto. Consulta Variables más abajo.

\w o \write filename
\w o \write |command #

Escribe el búfer de consulta actual en el archivo filename o lo envía mediante una tubería al comando del intérprete de comandos command. Si el búfer de consulta actual está vacío, se escribe en su lugar la consulta ejecutada más recientemente.

Si el argumento comienza con |, entonces todo el resto de la línea se toma como el command a ejecutar, y no se realiza interpolación de variables ni expansión de comillas invertidas en él. El resto de la línea simplemente se pasa literalmente al intérprete de comandos.

\warn text [ ... ] #

Este comando es idéntico a \echo excepto que la salida se escribirá en el canal de error estándar de psql, en lugar de en la salida estándar.

\watch [ i[nterval]=seconds ] [ c[ount]=times ] [ m[in_rows]=rows ] [ seconds ] #

Ejecuta repetidamente el búfer de consulta actual (como lo hace \g) hasta que se interrumpa, o la consulta falle, o se alcance el límite de recuento de ejecuciones (si se proporciona), o la consulta ya no devuelva el número mínimo de filas. Espera el número especificado de segundos (por defecto 2) entre ejecuciones. El tiempo de espera por defecto se puede cambiar con la variable WATCH_INTERVAL. Para compatibilidad con versiones anteriores, seconds se puede especificar con o sin el prefijo interval=. Cada resultado de consulta se muestra con un encabezado que incluye la cadena de texto de \pset title (si la hay), la hora de inicio de la consulta y el intervalo de retraso.

Si el búfer de consulta actual está vacío, se vuelve a ejecutar la consulta enviada más recientemente.

\x [ on | off | auto ] #

Establece o alterna el modo de formato de tabla expandido. Como tal, es equivalente a \pset expanded.

\z[Sx] [ pattern ] #

Muestra una lista de tablas, vistas y secuencias con sus privilegios de acceso asociados. Si se especifica un pattern, solo se muestran las tablas, vistas y secuencias cuyos nombres coincidan con el patrón. Por defecto, solo se muestran los objetos creados por el usuario; proporciona un patrón o el modificador S para incluir objetos del sistema. Si se añade x al nombre del comando, los resultados se muestran en modo expandido.

Este es un alias para \dp (display privileges).

\! [ command ] #

Sin argumentos, escapa a un sub-intérprete de comandos; psql se reanuda cuando el sub-intérprete de comandos finaliza. Con un argumento, ejecuta el comando del intérprete de comandos command.

A diferencia de la mayoría de los otros metacomandos, el resto de la línea siempre se toma como argumento(s) de \!, y no se realiza interpolación de variables ni expansión de comillas invertidas en los argumentos. El resto de la línea simplemente se pasa literalmente al intérprete de comandos.

\? [ topic ] #

Muestra información de ayuda. El parámetro opcional topic (por defecto commands) selecciona qué parte de psql se explica: commands describe los comandos de barra invertida de psql; options describe las opciones de línea de comandos que se pueden pasar a psql; y variables muestra ayuda sobre las variables de configuración de psql.

\; #

La barra invertida seguida de un punto y coma no es un metacomando en el mismo sentido que los comandos anteriores; más bien, simplemente hace que se añada un punto y coma al búfer de consulta sin ningún procesamiento adicional.

Normalmente, psql enviará un comando SQL al servidor tan pronto como llegue al punto y coma que finaliza el comando, incluso si queda más entrada en la línea actual. Así, por ejemplo, ingresar

select 1; select 2; select 3;

dará como resultado que los tres comandos SQL se envíen individualmente al servidor, mostrándose los resultados de cada uno antes de continuar con el siguiente comando. Sin embargo, un punto y coma ingresado como \; no activará el procesamiento de comandos, por lo que el comando anterior y el posterior se combinan efectivamente y se envían al servidor en una sola solicitud. Por ejemplo,

select 1\; select 2\; select 3;

da como resultado el envío de los tres comandos SQL al servidor en una sola solicitud, cuando se alcanza el punto y coma sin barra invertida. El servidor ejecuta dicha solicitud como una sola transacción, a menos que haya comandos BEGIN/COMMIT explícitos incluidos en la cadena de texto para dividirla en múltiples transacciones. (Consulta Section 54.2.2.1 para obtener más detalles sobre cómo maneja el servidor las cadenas de texto con múltiples consultas).

Patrones (Patterns)

Los diversos comandos \d aceptan un parámetro pattern para especificar los nombres de los objetos a mostrar. En el caso más simple, un patrón es simplemente el nombre exacto del objeto. Los caracteres dentro de un patrón normalmente se convierten a minúsculas, al igual que en los nombres SQL; por ejemplo, \dt FOO mostrará la tabla llamada foo. Al igual que en los nombres SQL, colocar comillas dobles alrededor de un patrón detiene la conversión a minúsculas. Si necesitas incluir un carácter de comilla doble real en un patrón, escríbelo como un par de comillas dobles dentro de una secuencia de comillas dobles; de nuevo, esto está de acuerdo con las reglas para identificadores entrecomillados de SQL. Por ejemplo, \dt "FOO""BAR" mostrará la tabla llamada FOO"BAR (no foo"bar). A diferencia de las reglas normales para nombres SQL, puedes poner comillas dobles alrededor de solo una parte de un patrón, por ejemplo, \dt FOO"FOO"BAR mostrará la tabla llamada fooFOObar.

Siempre que el parámetro pattern se omita por completo, los comandos \d muestran todos los objetos que son visibles en la ruta de búsqueda de esquemas (search path) actual — esto es equivalente a usar * como patrón. (Se dice que un objeto es visible si el esquema que lo contiene está en la ruta de búsqueda y ningún objeto del mismo tipo y nombre aparece antes en la ruta de búsqueda. Esto es equivalente a la afirmación de que se puede hacer referencia al objeto por su nombre sin una calificación de esquema explícita). Para ver todos los objetos en la base de datos independientemente de su visibilidad, usa *.* como patrón.

Dentro de un patrón, * coincide con cualquier secuencia de caracteres (incluyendo ninguna) y ? coincide con cualquier carácter individual. (Esta notación es comparable a los patrones de nombres de archivos del intérprete de comandos de Unix). Por ejemplo, \dt int* muestra las tablas cuyos nombres comienzan con int. Pero dentro de comillas dobles, * y ? pierden estos significados especiales y se comparan literalmente.

Un patrón de relación que contiene un punto (.) se interpreta como un patrón de nombre de esquema seguido de un patrón de nombre de objeto. Por ejemplo, \dt foo*.*bar* muestra todas las tablas cuyo nombre de tabla incluye bar que están en esquemas cuyos nombres comienzan con foo. Cuando no aparece ningún punto, el patrón solo coincide con los objetos que son visibles en la ruta de búsqueda de esquemas actual. Nuevamente, un punto dentro de comillas dobles pierde su significado especial y se compara literalmente. Un patrón de relación que contiene dos puntos (.) se interpreta como un nombre de base de datos seguido de un patrón de nombre de esquema seguido de un patrón de nombre de objeto. La porción del nombre de la base de datos no se tratará como un patrón y debe coincidir con el nombre de la base de datos a la que estás conectado actualmente, de lo contrario se producirá un error.

Un patrón de esquema que contiene un punto (.) se interpreta como un nombre de base de datos seguido de un patrón de nombre de esquema. Por ejemplo, \dn mydb.*foo* muestra todos los esquemas cuyos nombres incluyen foo. La porción del nombre de la base de datos no se tratará como un patrón y debe coincidir con el nombre de la base de datos conectada actualmente, de lo contrario se producirá un error.

Los usuarios avanzados pueden utilizar notaciones de expresiones regulares como clases de caracteres, por ejemplo [0-9] para coincidir con cualquier dígito. Todos los caracteres especiales de las expresiones regulares funcionan como se especifica en Section 9.7.3, excepto por el punto (.) que se toma como separador como se mencionó anteriormente, el asterisco (*) que se traduce a la notación de expresión regular .*, el signo de interrogación (?) que se traduce a punto (.), y el signo de dólar ($) que se compara literalmente. Puedes emular estos caracteres de patrón si es necesario escribiendo ? para ., (R+|) para R*, o (R|) para R?. $ no es necesario como carácter de expresión regular ya que el patrón debe coincidir con todo el nombre, a diferencia de la interpretación habitual de las expresiones regulares (en otras palabras, $ se añade automáticamente a tu patrón). Escribe * al principio y/o al final si no deseas que el patrón quede anclado. Ten en cuenta que dentro de comillas dobles, todos los caracteres especiales de las expresiones regulares pierden sus significados especiales y se comparan literalmente. Además, los caracteres especiales de las expresiones regulares se comparan literalmente en los patrones de nombres de operadores (es decir, el argumento de \do).

Características avanzadas

Variables

psql proporciona características de sustitución de variables similares a los intérpretes de comandos de Unix comunes. Las variables son simplemente pares de nombre/valor, donde el valor puede ser cualquier cadena de cualquier longitud. El nombre debe constar de letras (incluidas las no latinas), dígitos y guiones bajos.

Para establecer una variable, usa el metacomando de psql \set. Por ejemplo,

testdb=> \set foo bar

establece la variable foo con el valor bar. Para recuperar el contenido de la variable, precede el nombre con dos puntos, por ejemplo:

testdb=> \echo :foo
bar

Esto funciona tanto en comandos SQL regulares como en metacomandos; hay más detalles en SQL Interpolation, más abajo.

Si llamas a \set sin un segundo argumento, la variable se establece en un valor de cadena vacía. Para eliminar (es decir, borrar) una variable, usa el comando \unset. Para mostrar los valores de todas las variables, llama a \set sin ningún argumento.

Note

Los argumentos de \set están sujetos a las mismas reglas de sustitución que otros comandos. Así, puedes construir referencias interesantes como \set :foo 'something' y obtener «enlaces blandos» (soft links) o «variables de variables» de la fama de Perl o PHP, respectivamente. Desafortunadamente (¿o afortunadamente?), no hay forma de hacer nada útil con estas construcciones. Por otro lado, \set bar :foo es una forma perfectamente válida de copiar una variable.

Un cierto número de estas variables son tratadas de manera especial por psql. Representan ciertos ajustes de opciones que se pueden cambiar en tiempo de ejecución alterando el valor de la variable, o en algunos casos representan un estado cambiable de psql. Por convención, todos los nombres de las variables tratadas especialmente constan de letras ASCII en mayúsculas (y posiblemente dígitos y guiones bajos). Para garantizar la máxima compatibilidad en el futuro, evita usar tales nombres de variables para tus propios fines.

Las variables que controlan el comportamiento de psql generalmente no se pueden eliminar ni establecer con valores no válidos. Se permite un comando \unset pero se interpreta como el restablecimiento de la variable a su valor por defecto. Un comando \set sin un segundo argumento se interpreta como establecer la variable a on, para las variables de control que aceptan ese valor, y se rechaza para otras. Además, las variables de control que aceptan los valores on y off también aceptarán otras grafías comunes de valores booleanos, como true y false.

Las variables tratadas especialmente son:

AUTOCOMMIT #

Cuando está en on (el valor por defecto), cada comando SQL se confirma automáticamente tras su finalización exitosa. Para posponer la confirmación en este modo, debes ingresar un comando SQL BEGIN o START TRANSACTION. Cuando está en off o no establecido, los comandos SQL no se confirman hasta que emitas explícitamente COMMIT o END. El modo autocommit-off funciona emitiendo un BEGIN implícito por ti, justo antes de cualquier comando que no esté ya en un bloque de transacción y que no sea en sí mismo un BEGIN u otro comando de control de transacciones, ni un comando que no pueda ejecutarse dentro de un bloque de transacción (como VACUUM).

Note

En el modo autocommit-off, debes abandonar explícitamente cualquier transacción fallida ingresando ABORT o ROLLBACK. También ten en cuenta que si sales de la sesión sin confirmar, tu trabajo se perderá.

Note

El modo autocommit-on es el comportamiento tradicional de PostgreSQL, pero autocommit-off está más cerca de la especificación SQL. Si prefieres autocommit-off, es posible que desees establecerlo en el archivo psqlrc de todo el sistema o en tu archivo ~/.psqlrc.

COMP_KEYWORD_CASE #

Determina qué mayúsculas o minúsculas usar al completar una palabra clave SQL. Si se establece en lower o upper, la palabra completada estará en minúsculas o mayúsculas, respectivamente. Si se establece en preserve-lower o preserve-upper (el valor por defecto), la palabra completada conservará el formato de la palabra ya ingresada, pero las palabras que se completen sin haber ingresado nada estarán en minúsculas o mayúsculas, respectivamente.

DBNAME #

El nombre de la base de datos a la que estás conectado actualmente. Esto se establece cada vez que te conectas a una base de datos (incluido el inicio del programa), pero se puede cambiar o eliminar.

ECHO #

Si se establece en all, todas las líneas de entrada no vacías se imprimen en la salida estándar a medida que se leen. (Esto no se aplica a las líneas leídas de forma interactiva). Para seleccionar este comportamiento al iniciar el programa, usa la opción -a. Si se establece en queries, psql imprime cada consulta en la salida estándar a medida que se envía al servidor. La opción para seleccionar este comportamiento es -e. Si se establece en errors, entonces solo las consultas fallidas se muestran en la salida de error estándar. La opción para este comportamiento es -b. Si se establece en none (el valor por defecto), no se muestra ninguna consulta.

ECHO_HIDDEN #

Cuando esta variable se establece en on y un comando de barra invertida realiza una consulta a la base de datos, primero se muestra la consulta. Esta característica te ayuda a estudiar los aspectos internos de PostgreSQL y a proporcionar una funcionalidad similar en tus propios programas. (Para seleccionar este comportamiento al iniciar el programa, usa la opción -E). Si estableces esta variable en el valor noexec, las consultas simplemente se muestran pero no se envían realmente al servidor ni se ejecutan. El valor por defecto es off.

ENCODING #

La codificación del conjunto de caracteres del cliente actual. Esto se establece cada vez que te conectas a una base de datos (incluido el inicio del programa) y cuando cambias la codificación con \encoding, pero se puede cambiar o eliminar.

ERROR #

true si la última consulta SQL falló, false si tuvo éxito. Consulta también SQLSTATE.

FETCH_COUNT #

Si esta variable se establece en un valor entero mayor que cero, los resultados de las consultas SELECT se recuperan y se muestran en grupos de esa cantidad de filas, en lugar del comportamiento por defecto de recopilar todo el conjunto de resultados antes de mostrarlo. Por lo tanto, solo se utiliza una cantidad limitada de memoria, independientemente del tamaño del conjunto de resultados. Los valores de 100 a 1000 se utilizan comúnmente al habilitar esta característica. Ten en cuenta que al usar esta característica, una consulta puede fallar después de haber mostrado ya algunas filas.

Tip

Aunque puedes usar cualquier formato de salida con esta característica, el formato aligned por defecto suele verse mal porque cada grupo de FETCH_COUNT filas se formateará por separado, lo que genera anchos de columna variables en los grupos de filas. Los otros formatos de salida funcionan mejor.

HIDE_TABLEAM #

Si esta variable se establece en true, no se muestran los detalles del método de acceso de una tabla. Esto es principalmente útil para las pruebas de regresión.

HIDE_TOAST_COMPRESSION #

Si esta variable se establece en true, no se muestran los detalles del método de compresión de columnas. Esto es principalmente útil para las pruebas de regresión.

HISTCONTROL #

Si esta variable se establece en ignorespace, las líneas que comienzan con un espacio no se ingresan en la lista de historial. Si se establece en un valor de ignoredups, las líneas que coinciden con la línea de historial anterior no se ingresan. Un valor de ignoreboth combina las dos opciones. Si se establece en none (el valor por defecto), todas las líneas leídas en modo interactivo se guardan en la lista de historial.

Note

Esta característica fue plagiada descaradamente de Bash.

HISTFILE #

El nombre del archivo que se utilizará para almacenar la lista de historial. Si no está establecido, el nombre del archivo se toma de la variable de entorno PSQL_HISTORY. Si tampoco está establecida, el valor por defecto es ~/.psql_history, o %APPDATA%\postgresql\psql_history en Windows. Por ejemplo, colocar:

\set HISTFILE ~/.psql_history-:DBNAME

en ~/.psqlrc hará que psql mantenga un historial separado para cada base de datos.

Note

Esta característica fue plagiada descaradamente de Bash.

HISTSIZE #

El número máximo de comandos para almacenar en el historial de comandos (por defecto 500). Si se establece en un valor negativo, no se aplica ningún límite.

Note

Esta característica fue plagiada descaradamente de Bash.

HOST #

El host del servidor de base de datos al que estás conectado actualmente. Esto se establece cada vez que te conectas a una base de datos (incluido el inicio del programa), pero se puede cambiar o eliminar.

IGNOREEOF #

Si se establece en 1 o menos, enviar un carácter EOF (generalmente Control+D) a una sesión interactiva de psql terminará la aplicación. Si se establece en un valor numérico mayor, se deben escribir tantos caracteres EOF consecutivos para que finalice una sesión interactiva. Si la variable se establece en un valor no numérico, se interpreta como 10. El valor por defecto es 0.

Note

Esta característica fue plagiada descaradamente de Bash.

LASTOID #

El valor del último OID afectado, tal como lo devuelve un comando INSERT o \lo_import. Solo se garantiza que esta variable sea válida hasta que se muestre el resultado del siguiente comando SQL. Los servidores de PostgreSQL desde la versión 12 ya no admiten columnas de sistema OID, por lo que LASTOID siempre será 0 después de un INSERT al apuntar a dichos servidores.

LAST_ERROR_MESSAGE
LAST_ERROR_SQLSTATE #

El mensaje de error principal y el código SQLSTATE asociado para la consulta fallida más reciente en la sesión actual de psql, o una cadena vacía y 00000 si no ha ocurrido ningún error en la sesión actual.

ON_ERROR_ROLLBACK #

Cuando se establece en on, si una sentencia en un bloque de transacción genera un error, el error se ignora y la transacción continúa. Cuando se establece en interactive, dichos errores solo se ignoran en sesiones interactivas, y no cuando se leen archivos de script. Cuando se establece en off (el valor por defecto), una sentencia en un bloque de transacción que genera un error aborta toda la transacción. El modo de reversión de errores (error rollback) funciona emitiendo un SAVEPOINT implícito por ti, justo antes de cada comando que esté en un bloque de transacción, y luego revirtiendo al punto de salvaguarda (savepoint) si el comando falla.

ON_ERROR_STOP #

Por defecto, el procesamiento de comandos continúa después de un error. Cuando esta variable se establece en on, el procesamiento se detendrá de inmediato en su lugar. En modo interactivo, psql volverá a la línea de comandos; de lo contrario, psql saldrá, devolviendo el código de error 3 para distinguir este caso de condiciones de error fatales, que se reportan usando el código de error 1. En cualquier caso, cualquier script que se esté ejecutando actualmente (el script de nivel superior, si lo hay, y cualquier otro script que este haya invocado) se terminará de inmediato. Si la cadena de comandos de nivel superior contenía múltiples comandos SQL, el procesamiento se detendrá con el comando actual.

PIPELINE_COMMAND_COUNT #

El número de comandos en cola en una canalización (pipeline) en curso.

PIPELINE_RESULT_COUNT #

El número de comandos de una canalización (pipeline) en curso que fueron seguidos por un \flushrequest o un \syncpipeline, lo que obliga al servidor a enviar los resultados. Estos resultados se pueden recuperar con \getresults.

PIPELINE_SYNC_COUNT #

El número de mensajes de sincronización en cola en una canalización (pipeline) en curso.

PORT #

El puerto del servidor de base de datos al que estás conectado actualmente. Esto se establece cada vez que te conectas a una base de datos (incluido el inicio del programa), pero se puede cambiar o eliminar.

PROMPT1
PROMPT2
PROMPT3 #

Estos especifican el aspecto que deben tener las líneas de comandos que emite psql. Consulta Prompting más abajo.

QUIET #

Establecer esta variable en on es equivalente a la opción de línea de comandos -q. Probablemente no sea muy útil en modo interactivo.

ROW_COUNT #

El número de filas devueltas o afectadas por la última consulta SQL, o 0 si la consulta falló o no informó un recuento de filas.

SERVER_VERSION_NAME
SERVER_VERSION_NUM #

El número de versión del servidor como una cadena de texto, por ejemplo 9.6.2, 10.1 o 11beta1, y en forma numérica, por ejemplo 90602 o 100001. Se establecen cada vez que te conectas a una base de datos (incluido el inicio del programa), pero se pueden cambiar o eliminar.

SERVICE #

El nombre del servicio, si corresponde.

SHELL_ERROR #

true si el último comando del intérprete de comandos falló, false si tuvo éxito. Esto se aplica a los comandos del intérprete de comandos invocados a través de los metacomandos \!, \g, \o, \w y \copy, así como a la expansión de comillas invertidas (`). Ten en cuenta que para \o, esta variable se actualiza cuando el comando \o siguiente cierra la tubería de salida. Consulta también SHELL_EXIT_CODE.

SHELL_EXIT_CODE #

El estado de salida devuelto por el último comando del intérprete de comandos. 0–127 representan códigos de salida del programa, 128–255 indican la terminación por una señal, y -1 indica la falla al iniciar un programa o al recopilar su estado de salida. Esto se aplica a los comandos del intérprete de comandos invocados a través de los metacomandos \!, \g, \o, \w y \copy, así como a la expansión de comillas invertidas (`). Ten en cuenta que para \o, esta variable se actualiza cuando el comando \o siguiente cierra la tubería de salida. Consulta también SHELL_ERROR.

SHOW_ALL_RESULTS #

Cuando esta variable se establece en off, solo se muestra el último resultado de una consulta combinada (\;) en lugar de todos ellos. El valor por defecto es on. El comportamiento off es para mantener la compatibilidad con versiones anteriores de psql.

SHOW_CONTEXT #

Esta variable se puede establecer en los valores never, errors o always para controlar si los campos CONTEXT se muestran en los mensajes del servidor. El valor por defecto es errors (lo que significa que el contexto se mostrará en los mensajes de error, pero no en los mensajes de aviso o advertencia). Esta configuración no tiene efecto cuando VERBOSITY se establece en terse o sqlstate. (Consulta también \errverbose, para usar cuando desees una versión detallada del error que acabas de recibir).

SINGLELINE #

Establecer esta variable en on es equivalente a la opción de línea de comandos -S.

SINGLESTEP #

Establecer esta variable en on es equivalente a la opción de línea de comandos -s.

SQLSTATE #

El código de error (consulta Appendix A) asociado con la falla de la última consulta SQL, o 00000 si tuvo éxito.

USER #

El usuario de la base de datos con el que estás conectado actualmente. Esto se establece cada vez que te conectas a una base de datos (incluido el inicio del programa), pero se puede cambiar o eliminar.

VERBOSITY #

Esta variable se puede establecer en los valores default, verbose, terse o sqlstate para controlar la verbosidad de los informes de errores. (Consulta también \errverbose, para usar cuando desees una versión detallada del error que acabas de recibir).

VERSION
VERSION_NAME
VERSION_NUM #

Estas variables se establecen al iniciar el programa para reflejar la versión de psql, respectivamente como una cadena de texto detallada, una cadena corta (por ejemplo, 9.6.2, 10.1 o 11beta1) y un número (por ejemplo, 90602 o 100001). Se pueden cambiar o eliminar.

WATCH_INTERVAL #

Esta variable establece el intervalo por defecto, en segundos, que \watch espera entre ejecuciones de la consulta. El valor por defecto es 2 segundos. Especificar un intervalo en el comando anula esta variable.

Interpolación SQL

Una característica clave de las variables de psql es que puedes sustituirlas («interpolarlas») en sentencias SQL regulares, así como en los argumentos de los metacomandos. Además, psql proporciona facilidades para garantizar que los valores de las variables utilizados como literales e identificadores SQL estén entrecomillados correctamente. La sintaxis para interpolar un valor sin ningún tipo de entrecomillado es preceder el nombre de la variable con dos puntos (:). Por ejemplo,

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :foo;

consultaría la tabla my_table. Ten en cuenta que esto puede ser inseguro: el valor de la variable se copia literalmente, por lo que puede contener comillas no balanceadas o incluso comandos con barra invertida. Debes asegurarte de que tenga sentido en el lugar donde lo coloques.

Cuando se va a utilizar un valor como un literal o identificador SQL, lo más seguro es organizarlo para que esté entrecomillado. Para entrecomillar el valor de una variable como un literal SQL, escribe dos puntos seguidos del nombre de la variable entre comillas simples. Para entrecomillar el valor como un identificador SQL, escribe dos puntos seguidos del nombre de la variable entre comillas dobles. Estas construcciones manejan correctamente las comillas y otros caracteres especiales incrustados dentro del valor de la variable. El ejemplo anterior se escribiría de forma más segura de esta manera:

testdb=> \set foo 'my_table'
testdb=> SELECT * FROM :"foo";

La interpolación de variables no se realizará dentro de literales e identificadores SQL entrecomillados. Por lo tanto, una construcción como ':foo' no funciona para producir un literal entrecomillado a partir del valor de una variable (y sería inseguro si funcionara, ya que no manejaría correctamente las comillas incrustadas en el valor).

Un ejemplo de uso de este mecanismo es copiar el contenido de un archivo en una columna de tabla. Primero carga el archivo en una variable y luego interpola el valor de la variable como una cadena entrecomillada:

testdb=> \set content `cat my_file.txt`
testdb=> INSERT INTO my_table VALUES (:'content');

(Ten en cuenta que esto aún no funcionará si my_file.txt contiene bytes NUL. psql no admite bytes NUL incrustados en los valores de las variables).

Dado que los dos puntos pueden aparecer legalmente en los comandos SQL, un intento aparente de interpolación (es decir, :name, :'name' o :"name") no se reemplaza a menos que la variable nombrada esté actualmente establecida. En cualquier caso, puedes escapar un signo de dos puntos con una barra invertida para protegerlo de la sustitución.

La sintaxis especial :{?name} devuelve TRUE o FALSE dependiendo de si la variable existe o no, y por lo tanto siempre se sustituye, a menos que los dos puntos estén escapados con una barra invertida.

La sintaxis de dos puntos para variables es estándar de SQL para lenguajes de consulta incrustados, como ECPG. Las sintaxis de dos puntos para segmentos de arreglos y conversiones de tipo son extensiones de PostgreSQL, que a veces pueden entrar en conflicto con el uso estándar. La sintaxis de comillas y dos puntos para escapar el valor de una variable como un literal o identificador SQL es una extensión de psql.

Personalización de la línea de comandos (Prompting)

Las líneas de comandos que emite psql se pueden personalizar a tu gusto. Las tres variables PROMPT1, PROMPT2 y PROMPT3 contienen cadenas de texto y secuencias de escape especiales que describen la apariencia de la línea de comandos. La línea de comandos 1 (PROMPT1) es la línea de comandos normal que se muestra cuando psql solicita un nuevo comando. La línea de comandos 2 (PROMPT2) se muestra cuando se espera más entrada durante la introducción de un comando, por ejemplo, porque el comando no se terminó con un punto y coma o no se cerró una comilla. La línea de comandos 3 (PROMPT3) se muestra cuando estás ejecutando un comando SQL COPY FROM STDIN y necesitas escribir un valor de fila en la terminal.

El valor de la variable de línea de comandos seleccionada se imprime literalmente, excepto cuando se encuentra un signo de porcentaje (%). Dependiendo del siguiente carácter, se sustituye por algún otro texto en su lugar. Las sustituciones definidas son:

%M #

El nombre de host completo (con el nombre de dominio) del servidor de base de datos, o [local] si la conexión es a través de un socket de dominio Unix, o [local:/dir/name], si el socket de dominio Unix no está en la ubicación predeterminada compilada.

%m #

El nombre de host del servidor de base de datos, truncado en el primer punto, o [local] si la conexión es a través de un socket de dominio Unix.

%> #

El número de puerto en el que está escuchando el servidor de base de datos.

%n #

El nombre de usuario de la sesión de base de datos. (La expansión de este valor puede cambiar durante una sesión de base de datos como resultado del comando SET SESSION AUTHORIZATION).

%s #

El nombre del servicio.

%/ #

El nombre de la base de datos actual.

%~ #

Como %/, pero la salida es ~ (tilde) si la base de datos es tu base de datos predeterminada.

%# #

Si el usuario de la sesión es un superusuario de la base de datos, entonces un #, de lo contrario un >. (La expansión de este valor puede cambiar durante una sesión de base de datos como resultado del comando SET SESSION AUTHORIZATION).

%p #

El ID de proceso (PID) del backend al que estás conectado actualmente.

%P #

Estado de la canalización (pipeline): off cuando no está en una canalización, on cuando está en una canalización en curso o abort cuando está en una canalización abortada.

%R #

En la línea de comandos 1 (PROMPT1) normalmente es =, pero @ si la sesión está en una rama inactiva de un bloque condicional, o ^ si está en modo de una sola línea, o ! si la sesión está desconectada de la base de datos (lo que puede ocurrir si falla \connect). En la línea de comandos 2 (PROMPT2) %R se reemplaza por un carácter que depende de por qué psql espera más entrada: - si el comando simplemente no se ha terminado todavía, pero * si hay un comentario /* ... */ sin terminar, una comilla simple si hay una cadena entrecomillada sin terminar, una comilla doble si hay un identificador entrecomillado sin terminar, un signo de dólar si hay una cadena entrecomillada por dólar sin terminar, o ( si hay un paréntesis izquierdo no emparejado. En la línea de comandos 3 (PROMPT3) %R no produce nada.

%x #

Estado de la transacción: una cadena vacía cuando no está en un bloque de transacción, o * cuando está en un bloque de transacción, o ! cuando está en un bloque de transacción fallido, o ? cuando el estado de la transacción es indeterminado (por ejemplo, porque no hay conexión).

%l #

El número de línea dentro de la sentencia actual, comenzando desde 1.

%digits #

Se sustituye el carácter con el código octal indicado.

%:name: #

El valor de la variable de psql name. Consulta Variables, más arriba, para obtener más detalles.

%`command` #

La salida de command, similar a la sustitución ordinaria de comillas invertidas (back-tick).

%[ ... %] #

Prompts can contain terminal control characters which, for example, change the color, background, or style of the prompt text, or change the title of the terminal window. In order for the line editing features of Readline to work properly, these non-printing control characters must be designated as invisible by surrounding them with %[ and %]. Multiple pairs of these can occur within the prompt. For example:

testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n@%/%R%[%033[0m%]%# '

results in a boldfaced (1;) yellow-on-black (33;40) prompt on VT100-compatible, color-capable terminals.

%w #

Whitespace of the same width as the most recent output of PROMPT1. This can be used as a PROMPT2 setting, so that multi-line statements are aligned with the first line, but there is no visible secondary prompt.

Para insertar un signo de porcentaje en tu línea de comandos, escribe %%. Las líneas de comandos predeterminadas son '%/%R%x%# ' para las líneas de comandos 1 y 2, y '>> ' para la línea de comandos 3.

Note

Esta característica fue plagiada descaradamente de tcsh.

Edición de la línea de comandos (Command-Line Editing)

psql utiliza la biblioteca Readline o libedit, si están disponibles, para facilitar la edición y recuperación de líneas. El historial de comandos se guarda automáticamente al salir de psql y se vuelve a cargar cuando se inicia psql. Escribe la flecha hacia arriba o control-P para recuperar líneas anteriores.

También puedes usar la función de autocompletado con el tabulador (TAB) para completar palabras clave y nombres de objetos SQL escritos parcialmente en muchos contextos (aunque de ningún modo en todos). Por ejemplo, al comienzo de un comando, al escribir ins y presionar TAB se autocompletará con insert into . Luego, al escribir algunas letras del nombre de una tabla o esquema y presionar TAB se completará el nombre inacabado, o se ofrecerá un menú de posibles autocompletados cuando haya más de uno. (Dependiendo de la biblioteca en uso, es posible que debas presionar TAB más de una vez para obtener un menú).

El autocompletado con el tabulador para nombres de objetos SQL requiere enviar consultas al servidor para buscar posibles coincidencias. En algunos contextos esto puede interferir con otras operaciones. Por ejemplo, después de BEGIN será demasiado tarde para emitir SET TRANSACTION ISOLATION LEVEL si se realiza una consulta de autocompletado con el tabulador en medio. Si no deseas utilizar el autocompletado en absoluto, puedes desactivarlo de forma permanente poniendo esto en un archivo llamado .inputrc en tu directorio de inicio:

$if psql
set disable-completion on
$endif

(Esto no es una característica de psql sino de Readline. Lee su documentación para obtener más detalles).

La opción de línea de comandos -n (--no-readline) también puede ser útil para desactivar el uso de Readline para una sola ejecución de psql. Esto evita el autocompletado, el uso o registro del historial de la línea de comandos y la edición de comandos de varias líneas. Es particularmente útil cuando necesitas copiar y pegar texto que contiene caracteres TAB.

Entorno (Environment)

COLUMNS #

Si \pset columns is zero, controla el ancho para el formato wrapped y el ancho para determinar si la salida ancha requiere el paginador o si debe cambiarse al formato vertical en el modo de expansión automática (expanded auto).

PGDATABASE
PGHOST
PGPORT
PGUSER #

Parámetros de conexión predeterminados (consulta Section 32.15).

PG_COLOR #

Especifica si se debe usar color en los mensajes de diagnóstico. Los valores posibles son always, auto y never.

PSQL_EDITOR
EDITOR
VISUAL #

Editor utilizado por los comandos \e, \ef y \ev. Estas variables se examinan en el orden indicado; se utiliza la primera que esté establecida. Si ninguna está establecida, el valor predeterminado es usar vi en sistemas Unix o notepad.exe en sistemas Windows.

PSQL_EDITOR_LINENUMBER_ARG #

Cuando se utiliza \e, \ef o \ev con un argumento de número de línea, esta variable especifica el argumento de línea de comandos utilizado para pasar el número de línea inicial al editor del usuario. Para editores como Emacs o vi, este es un signo más. Incluye un espacio al final del valor de la variable si es necesario que haya espacio entre el nombre de la opción y el número de línea. Ejemplos:

PSQL_EDITOR_LINENUMBER_ARG='+'
PSQL_EDITOR_LINENUMBER_ARG='--line '

El valor predeterminado es + en sistemas Unix (que corresponde al editor predeterminado vi, y es útil para muchos otros editores comunes); pero no hay un valor predeterminado en sistemas Windows.

PSQL_HISTORY #

Ubicación alternativa para el archivo de historial de comandos. Se realiza la expansión de la tilde (~).

PSQL_PAGER
PAGER #

Si los resultados de una consulta no caben en la pantalla, se envían a través de este comando. Los valores típicos son more o less. El uso del paginador se puede desactivar estableciendo PSQL_PAGER o PAGER en una cadena vacía, o ajustando las opciones relacionadas con el paginador del comando \pset. Estas variables se examinan en el orden indicado; se utiliza la primera que esté establecida. Si ninguna está establecida, el valor predeterminado es usar more en la mayoría de las plataformas, pero less en Cygwin.

PSQL_WATCH_PAGER #

Cuando una consulta se ejecuta repetidamente con el comando \watch, no se utiliza un paginador por defecto. Este comportamiento se puede cambiar estableciendo PSQL_WATCH_PAGER en un comando del paginador, en sistemas Unix. El paginador pspg (que no forma parte de PostgreSQL pero está disponible en muchas distribuciones de software de código abierto) puede mostrar la salida de \watch si se inicia con la opción --stream.

PSQLRC #

Ubicación alternativa del archivo .psqlrc del usuario. Se realiza la expansión de la tilde (~).

SHELL #

Comando ejecutado por el comando \!.

TMPDIR #

Directorio para almacenar archivos temporales. El valor predeterminado es /tmp.

Esta utilidad, al igual que la mayoría de las otras utilidades de PostgreSQL, también utiliza las variables de entorno admitidas por libpq (consulta Section 32.15).

Archivos (Files)

psqlrc y ~/.psqlrc #

A menos que se le pase una opción -X, psql intenta leer y ejecutar comandos desde el archivo de inicio de todo el sistema (psqlrc) y luego el archivo de inicio personal del usuario (~/.psqlrc), después de conectarse a la base de datos pero antes de aceptar comandos normales. Estos archivos se pueden usar para configurar el cliente y/o el servidor al gusto, típicamente con comandos \set y SET.

El archivo de inicio de todo el sistema se llama psqlrc. Por defecto se busca en el directorio de «configuración del sistema» de la instalación, que se identifica con mayor fiabilidad ejecutando pg_config --sysconfdir. Típicamente, este directorio será ../etc/ en relación con el directorio que contiene los ejecutables de PostgreSQL. El directorio en el que buscar se puede establecer explícitamente a través de la variable de entorno PGSYSCONFDIR.

El archivo de inicio personal del usuario se llama .psqlrc y se busca en el directorio de inicio del usuario que realiza la invocación. En Windows, el archivo de inicio personal se llama en su lugar %APPDATA%\postgresql\psqlrc.conf. En cualquier caso, esta ruta de archivo predeterminada se puede invalidar estableciendo la variable de entorno PSQLRC.

Tanto el archivo de inicio de todo el sistema como el archivo de inicio personal del usuario se pueden hacer específicos para la versión de psql añadiendo un guión y el identificador de la versión mayor o menor de PostgreSQL al nombre del archivo, por ejemplo, ~/.psqlrc-18 o ~/.psqlrc-18.4. El archivo que coincida con la versión más específica se leerá con preferencia sobre un archivo no específico de la versión. Estos sufijos de versión se añaden después de determinar la ruta del archivo como se explicó anteriormente.

.psql_history #

El historial de la línea de comandos se almacena en el archivo ~/.psql_history, o en %APPDATA%\postgresql\psql_history en Windows.

La ubicación del archivo de historial se puede establecer explícitamente a través de la variable HISTFILE de psql o la variable de entorno PSQL_HISTORY.

Notas

  • psql funciona mejor con servidores de la misma versión principal o de una anterior. Es particularmente probable que los comandos de barra invertida fallen si el servidor es de una versión más reciente que el propio psql. Sin embargo, los comandos de barra invertida de la familia \d deberían funcionar con servidores de versiones anteriores hasta la 9.2, aunque no necesariamente con servidores más nuevos que el propio psql. La funcionalidad general de ejecutar comandos SQL y mostrar los resultados de las consultas también debería funcionar con servidores de una versión principal más reciente, pero esto no se puede garantizar en todos los casos.

    Si deseas usar psql para conectarte a varios servidores de diferentes versiones principales, se recomienda que utilices la versión más reciente de psql. Alternativamente, puedes conservar una copia de psql de cada versión principal y asegurarte de usar la versión que coincida con el servidor respectivo. Pero en la práctica, esta complicación adicional no debería ser necesaria.

  • Antes de PostgreSQL 9.6, la opción -c implicaba -X (--no-psqlrc); este ya no es el caso.

  • Antes de PostgreSQL 8.4, psql permitía que el primer argumento de un comando de barra invertida de una sola letra comenzara directamente después del comando, sin espacio en blanco de por medio. Ahora, se requiere algo de espacio en blanco.

Notas para usuarios de Windows

psql está compilado como una «aplicación de consola». Dado que las ventanas de la consola de Windows utilizan una codificación diferente a la del resto del sistema, debes tener especial cuidado al utilizar caracteres de 8 bits dentro de psql. Si psql detecta una página de códigos de la consola problemática, te advertirá al iniciar. Para cambiar la página de códigos de la consola, son necesarias dos cosas:

  • Establece la página de códigos ingresando cmd.exe /c chcp 1252. (1252 es una página de códigos apropiada para el alemán; reemplázala con tu valor). Si estás utilizando Cygwin, puedes poner este comando en /etc/profile.

  • Establece la fuente de la consola en Lucida Console, porque la fuente ráster no funciona con la página de códigos ANSI.

Ejemplos

El primer ejemplo muestra cómo distribuir un comando en varias líneas de entrada. Observa cómo cambia la línea de comandos:

testdb=> CREATE TABLE mi_tabla (
testdb(>  primera integer not null default 0,
testdb(>  segunda text)
testdb-> ;
CREATE TABLE

Ahora observemos la definición de la tabla nuevamente:

testdb=> \d mi_tabla
              Table "public.mi_tabla"
 Column  |  Type   | Collation | Nullable | Default 
---------+---------+-----------+----------+---------
 primera | integer |           | not null | 0
 segunda | text    |           |          |         

Ahora cambiamos la línea de comandos a algo más interesante:

testdb=> \set PROMPT1 '%n@%m %~%R%# '
peter@localhost testdb=>

Supongamos que has llenado la tabla con datos y quieres echarle un vistazo:

peter@localhost testdb=> SELECT * FROM mi_tabla;
 primera | segunda 
---------+---------
       1 | uno
       2 | dos
       3 | tres
       4 | cuatro
(4 rows)

Puedes mostrar las tablas de diferentes maneras utilizando el comando \pset:

peter@localhost testdb=> \pset border 2
Border style is 2.
peter@localhost testdb=> SELECT * FROM mi_tabla;
+---------+---------+
| primera | segunda |
+---------+---------+
|       1 | uno     |
|       2 | dos     |
|       3 | tres    |
|       4 | cuatro  |
+---------+---------+
(4 rows)

peter@localhost testdb=> \pset border 0
Border style is 0.
peter@localhost testdb=> SELECT * FROM mi_tabla;
primera segunda
------- -------
      1 uno
      2 dos
      3 tres
      4 cuatro
(4 rows)

peter@localhost testdb=> \pset border 1
Border style is 1.
peter@localhost testdb=> \pset format csv
Output format is csv.
peter@localhost testdb=> \pset tuples_only
Tuples only is on.
peter@localhost testdb=> SELECT segunda, primera FROM mi_tabla;
uno,1
dos,2
tres,3
cuatro,4
peter@localhost testdb=> \pset format unaligned
Output format is unaligned.
peter@localhost testdb=> \pset fieldsep '\t'
Field separator is "	".
peter@localhost testdb=> SELECT segunda, primera FROM mi_tabla;
uno	1
dos	2
tres	3
cuatro	4

Alternativamente, usa los comandos cortos:

peter@localhost testdb=> \a \t \x
Output format is aligned.
Tuples only is off.
Expanded display is on.
peter@localhost testdb=> SELECT * FROM mi_tabla;
-[ RECORD 1 ]----+-------
primera          | 1
segunda          | uno
-[ RECORD 2 ]----+-------
primera          | 2
segunda          | dos
-[ RECORD 3 ]----+-------
primera          | 3
segunda          | tres
-[ RECORD 4 ]----+-------
primera          | 4
segunda          | cuatro

Además, estas opciones de formato de salida se pueden establecer para una sola consulta utilizando \g:

peter@localhost testdb=> SELECT * FROM mi_tabla
peter@localhost testdb-> \g (format=aligned tuples_only=off expanded=on)
-[ RECORD 1 ]----+-------
primera          | 1
segunda          | uno
-[ RECORD 2 ]----+-------
primera          | 2
segunda          | dos
-[ RECORD 3 ]----+-------
primera          | 3
segunda          | tres
-[ RECORD 4 ]----+-------
primera          | 4
segunda          | cuatro

Aquí hay un ejemplo del uso del comando \df para buscar solo funciones cuyos nombres coincidan con int*pl y cuyo segundo argumento sea del tipo bigint:

testdb=> \df int*pl * bigint
                          List of functions
   Schema   |  Name   | Result data type | Argument data types | Type 
------------+---------+------------------+---------------------+------
 pg_catalog | int28pl | bigint           | smallint, bigint    | func
 pg_catalog | int48pl | bigint           | integer, bigint     | func
 pg_catalog | int8pl  | bigint           | bigint, bigint      | func
(3 rows)

Aquí, se utiliza la opción + para mostrar información adicional sobre una de estas funciones, y x para mostrar los resultados en modo expandido:

testdb=> \df+x int*pl integer bigint
List of functions
-[ RECORD 1 ]-------+-----------------------------
Schema              | pg_catalog
Name                | int48pl
Result data type    | bigint
Argument data types | integer, bigint
Type                | func
Volatility          | immutable
Parallel            | safe
Owner               | postgres
Security            | invoker
Leakproof?          | no
Access privileges   | 
Language            | internal
Internal name       | int48pl
Description         | implementation of + operator

Cuando sea adecuado, los resultados de la consulta se pueden mostrar en una representación de tabla dinámica (crosstab) con el comando \crosstabview:

testdb=> SELECT primera, segunda, primera > 2 AS gt2 FROM mi_tabla;
 primera | segunda | gt2 
---------+---------+-----
       1 | uno     | f
       2 | dos     | f
       3 | tres    | t
       4 | cuatro  | t
(4 rows)

testdb=> \crosstabview primera segunda
 primera | uno | dos | tres | cuatro 
---------+-----+-----+------+--------
       1 | f   |     |      | 
       2 |     | f   |      | 
       3 |     |     | t    | 
       4 |     |     |      | t
(4 rows)

Este segundo ejemplo muestra una tabla de multiplicar con las filas ordenadas en orden numérico inverso y las columnas con un orden numérico ascendente independiente.

testdb=> SELECT t1.primera as "A", t2.primera+100 AS "B", t1.primera*(t2.primera+100) as "AxB",
testdb-> row_number() over(order by t2.primera) AS ord
testdb-> FROM mi_tabla t1 CROSS JOIN mi_tabla t2 ORDER BY 1 DESC
testdb-> \crosstabview "A" "B" "AxB" ord
 A | 101 | 102 | 103 | 104 
---+-----+-----+-----+-----
 4 | 404 | 408 | 412 | 416
 3 | 303 | 306 | 309 | 312
 2 | 202 | 204 | 206 | 208
 1 | 101 | 102 | 103 | 104
(4 rows)