1. Qué es
Antes de escribir SQL hay que llegar a la base de datos. Y una base de datos no se abre como un archivo: no hay nada que hacer doble clic. Necesitas un cliente, un programa que se conecta al servidor, le manda tus consultas y te devuelve los resultados.
Hay dos, y no compiten: se usan para cosas distintas.
| DBeaver (gráfico) | psql (terminal) |
|
|---|---|---|
| Escribir consultas | ✅ Autocompletado, historial | ❌ Sin ayuda |
| Leer resultados anchos | ✅ Tabla con scroll | ❌ Se descuadra |
| Ver el esquema visualmente | ✅ Diagrama automático | ❌ |
| Explorar rápido | Navegar el árbol | ✅ Comandos de una letra |
Ejecutar un archivo .sql |
Torpe | ✅ psql -f archivo.sql |
¿Cuál usarás en el transcurso del curso? DBeaver es todo lo que necesitas — no tienes que instalar PostgreSQL ni abrir una terminal.
psqlaparece más adelante, cuando montes la base de datos en tu propia máquina; viene incluido con PostgreSQL y no hay que instalarlo aparte.
Este tema enseña los dos. Si algo dice «en psql» y tú aún no lo tienes, sáltatelo: al lado siempre está cómo hacer lo mismo en DBeaver.
2. Cómo se conecta
Cualquier cliente necesita lo mismo — host, puerto, base, usuario y contraseña. Cambia solo la forma de dárselos.
2.1 Descarga e instala DBeaver
En https://dbeaver.io/download/. Dos avisos y ya:
- Elige Community Edition, que es la gratuita. La otra que ofrecen es de pago y no la necesitas para nada de este curso.
- En Mac hay dos versiones, Intel y Apple Silicon. Si tu Mac es de 2020 en adelante, casi seguro es Apple Silicon. En Windows es un instalador y siguiente-siguiente.
No hace falta instalar PostgreSQL en tu máquina: DBeaver es solo el cliente, y la base ya está corriendo en otro sitio.
2.2 Crea la conexión
Nueva conexión → PostgreSQL → y rellenas cinco campos:
| Campo | Qué es |
|---|---|
| Host | La dirección del servidor. En local, localhost |
| Port | 5432, el puerto por defecto de PostgreSQL |
| Database | El nombre de la base. Aquí, northwind |
| Username | Tu usuario |
| Password | Tu contraseña |
⚠️ Si te conectas a una base en la nube, activa SSL en la pestaña de ese nombre antes de probar la conexión. No basta con marcar la casilla: en el desplegable de modo hay que elegir además required. Es obligatorio, y es el fallo número uno: sin SSL la conexión se rechaza con un mensaje que no dice «te falta SSL», sino algo sobre el servidor cerrando la conexión inesperadamente.
Después, Test Connection para comprobar antes de guardar. Si responde, ya está.
2.3 En la terminal
# En local, con los valores por defecto
psql -d northwind
# Con la cadena completa (nube, o cualquier servidor remoto)
psql "postgresql://usuario:clave@host/northwind?sslmode=require"
Es exactamente la misma información que los cinco campos de arriba, empaquetada en una línea. La cadena desarmada pieza por pieza está en anatomia-de-una-conexion-a-postgresql.
3. Los comandos de psql, y qué haces en DBeaver
Empiezan con \ y no son SQL — los interpreta psql, no el servidor. Por eso dan error si los pegas en DBeaver. Pero todo lo que hacen tiene su equivalente:
En psql |
Qué hace | En DBeaver |
|---|---|---|
\l |
Lista las bases del servidor | El árbol de la izquierda, nivel Databases |
\dt |
Lista las tablas | Despliega tu base → Schemas → public → Tables |
\d tabla |
Describe una tabla: columnas, tipos, PK, FK | Doble clic en la tabla → pestañas Columns, Constraints, Foreign Keys |
\d+ tabla |
Lo mismo, más tamaño | Pestaña Statistics de la tabla |
\dn |
Lista los esquemas | El nivel Schemas del árbol |
\du |
Lista usuarios y permisos | Security → Roles |
\x |
Vista vertical, un campo por línea | Botón record al lado del resultado de la query |
\timing |
Cuánto tardó la consulta | Ya sale solo, abajo en la pestaña de resultados |
\i archivo.sql |
Ejecuta un archivo | File → Open File, y ejecutar |
\q |
Salir | Cerrar la ventana |
Los dos que más vas a usar son \dt y \d tabla — o, en DBeaver, desplegar el árbol y hacer doble clic. Con eso te orientas en cualquier base.
Y hay una tercera vía que funciona en los dos: preguntarle a la propia base con SQL, consultando
information_schema. Es más largo de escribir, pero es SQL puro — funciona en DBeaver, enpsql, en la nube y en otros motores. Lo ves en la sección siguiente.
4. Ejemplos sobre Northwind
Dónde estoy parado. Útil cuando tienes varias conexiones abiertas y no sabes cuál es cuál:
SELECT current_database() AS base, current_user AS usuario;
base | usuario
-----------+-------------------
northwind | angelgarciachanga
Qué tablas hay: Es la primera consulta que conviene lanzar en una base desconocida — te dice de un vistazo dónde están los datos de verdad:
SELECT relname AS tabla, n_live_tup AS filas
FROM pg_stat_user_tables
WHERE schemaname = 'public';
tabla | filas
---------------+-------
order_details | 2155
orders | 830
customers | 91
products | 77
pg_stat_user_tables: PostgreSQL guarda información sobre sí mismo en tablas. Esta es una de ellas: una fila = una tabla de tu base. en MySQL o SQL Server no existe.
Las columnas de una tabla, sin \d:
SELECT column_name, data_type, is_nullable
FROM information_schema.columns
WHERE table_name = 'shippers'
AND table_schema = 'public'
ORDER BY ordinal_position;
column_name | data_type | is_nullable
--------------+-------------------+-------------
shipper_id | integer | NO
company_name | character varying | NO
phone | character varying | YES
Esta versión es SQL puro: funciona en DBeaver, en la nube y en otros motores.
\dsolo funciona enpsql.
5. Errores comunes
- No activar 'required' en la opción de SSL contra una base en la nube. El error no menciona SSL: habla de que el servidor cerró la conexión de forma inesperada. Si te conectas a un servidor remoto y falla a la primera, empieza por ahí.
- Pegar comandos
\en DBeaver. No son SQL. DBeaver dirá que hay un error de sintaxis y tendrá razón. Usa la columna de la derecha de la tabla del § 3. SASL authentication failed. Usuario o contraseña incorrectos — o una credencial que ya caducó. Si antes funcionaba y de pronto no, es lo segundo: no has hecho nada mal, se te venció el acceso.- Confundir
\lcon-l. Dentro depsqles\l; desde la terminal espsql -l, con ele minúscula. Escribirpsql -1(un uno) da el error "-1 sólo puede ser usado en modo no interactivo", que no ayuda nada. - Olvidar el punto y coma. En
psql, una sentencia no se ejecuta hasta el;. Si el prompt cambia de=#a-#, es que sigue esperando. - Dejar la conexión abierta contra una base en la nube. En local no pasa nada; en la nube consume cuota, aunque no estés haciendo nada. Cierra el cliente al terminar. Ver
postgresql-en-la-nube-con-neon
6. Ejercicios
Todos se pueden resolver solo con DBeaver.
- Conéctate a
northwindy averigua cuántas columnas tieneorders, sin usarSELECT *. orderstiene 14 columnas y en horizontal no se lee. Consulta una fila y ponla en vertical. ¿En qué casos lo preferirías?- Compara cuánto tarda
SELECT count(*) FROM order_detailscontraSELECT count(*) FROM customers.
7. Pregunta de negocio
Llegas a una base de datos que no conoces, con 40 tablas. Tienes cinco minutos antes de una reunión donde te van a preguntar de qué va. ¿Qué ejecutas?
Piensa en el orden. No es una sola consulta.