HOWTO · PostgreSQL
Ejecutar consultas de PostgreSQL en PSQL
Este artículo describe cómo ejecutar consultas desde la herramienta de línea de comandos de PostgreSQL.
En esta página
Usa psql, el cliente de terminal de PostgreSQL, para ejecutar SQL de forma interactiva, enviar una consulta a una base de datos seleccionada o ejecutar sentencias desde un archivo .sql. A diferencia de pgAdmin, psql se ejecuta en una terminal y acepta tanto sentencias SQL como sus propios comandos con barra invertida. Estos ejemplos presuponen que se puede acceder al servidor PostgreSQL y que el rol tiene permiso para conectarse a la base de datos seleccionada.
Ejecutar sentencias SQL en una sesión interactiva de psql
Inicia una sesión interactiva con psql -U postgres -d postgres y sustituye postgres por un rol y una base de datos disponibles en tu instalación. En el indicador, escribe una sentencia SQL y termínala con punto y coma. Puedes repetir el siguiente ejemplo de tabla temporal en la misma sesión. Antes de insertar las dos filas, vacía la tabla de ejemplo, que solo existe en esa sesión; así, el resultado mostrado se mantiene igual cada vez.
CREATE TEMP TABLE IF NOT EXISTS bag (id integer PRIMARY KEY, model text NOT NULL);
TRUNCATE bag;
INSERT INTO bag (id, model) VALUES (1, 'Adidas'), (2, 'Jale') ON CONFLICT (id) DO UPDATE SET model = EXCLUDED.model;
SELECT id, model FROM bag ORDER BY id;
La consulta SELECT devuelve estas columnas y filas:
| id | model |
|---|---|
| 1 | Adidas |
| 2 | Jale |
En una sesión interactiva, al pulsar Enter pasas a la siguiente línea de entrada; eso no termina por sí solo la sentencia SQL. Si una sentencia no tiene punto y coma al final, psql sigue aceptando entrada y suele mostrar un indicador de continuación. Añade el punto y coma para completar la sentencia. Si empezaste a escribir la sentencia equivocada, usa \r para borrar el búfer de consulta y volver a empezar. Si añades accidentalmente otro comando antes de terminar la primera sentencia, psql trata la entrada como una sola sentencia SQL, lo que puede provocar un error de sintaxis.
Conectarse a la base de datos de destino y ejecutar una consulta
Lista las bases de datos visibles para tu rol con \l o \l+ (\l+ incluye información adicional). También puedes consultar el catálogo de PostgreSQL con SELECT datname FROM pg_database ORDER BY datname;. El catálogo enumera las bases de datos, pero que tu rol pueda conectarse a una depende de los permisos y de la configuración del servidor.
Dentro de psql, conéctate a una base de datos con \c postgres; sustituye el nombre por el de la base de datos de destino. Usa \dt para listar las tablas del esquema de búsqueda actual. Para consultar otros tipos de relaciones, usa \d, que también muestra vistas, secuencias y otros tipos de relaciones compatibles. Para conectarte al iniciar el cliente, usa la opción -d: psql -U postgres -d postgres.
Puedes pasar una consulta con -c; por ejemplo: psql -U postgres -d postgres -c "SELECT datname FROM pg_database ORDER BY datname;". Esta consulta al catálogo funciona en una sesión nueva de psql y no depende de tablas creadas anteriormente. Las reglas de entrecomillado de la shell varían. En una shell compatible con POSIX, las comillas dobles agrupan el SQL en un solo argumento de la línea de comandos; son sintaxis de la shell, no comillas SQL. Si una consulta contiene literales de cadena SQL, la shell conserva sus comillas simples dentro de este argumento entrecomillado con comillas dobles. En PowerShell o en el Símbolo del sistema, las reglas de comillas y escapes pueden ser distintas; ajusta el comando para esa shell. El punto y coma termina la sentencia SQL, pero es opcional al final de una única sentencia pasada con -c.
Ejecutar una consulta de una línea con el modo de línea única
Inicia psql con -S o --single-line para activar el modo de línea única, por ejemplo, psql -U postgres -d postgres -S. En este modo, una nueva línea envía la línea de entrada actual como consulta, así que escribe una sentencia SQL por línea. Por ejemplo, escribe SELECT datname FROM pg_database ORDER BY datname y pulsa Enter. Este modo está pensado para entradas de una sola línea; para sentencias SQL que ocupen varias líneas, usa el modo interactivo normal y termina cada sentencia con punto y coma.
Ejecutar SQL desde un archivo con psql
Para ejecutar un archivo SQL al iniciar el cliente, usa psql -U postgres -d postgres -f "/path/to/query.sql". Sustituye el marcador de posición por la ruta real del archivo. Si la ruta contiene espacios, ponla entre comillas según las reglas de tu shell; los separadores de ruta también dependen del sistema operativo y de la shell.
Desde una sesión interactiva ya abierta, ejecuta el mismo archivo con \i '/path/to/query.sql'. El archivo debe poder leerse desde el entorno en el que se ejecuta psql. Ambos métodos envían el SQL del archivo a la base de datos seleccionada, así que confirma la base de datos y el rol antes de ejecutar sentencias que modifiquen datos.