Curso SQL · Northwind
Tema 1 de 60
Bloque 1 · Antes de escribir SQL PostgreSQL 17 northwind

Conectarse y explorar

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. psql aparece 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.

Conectarse a la base del curso con DBeaver

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 → SchemaspublicTables
\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 SecurityRoles
\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, en psql, en la nube y en otros motores. Lo ves en la sección siguiente.

4. Ejemplos sobre Northwind

Primera vez usando DBeaver - Curso SQL

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. \d solo funciona en psql.

5. Errores comunes

  1. 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í.
  2. 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.
  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.
  4. Confundir \l con -l. Dentro de psql es \l; desde la terminal es psql -l, con ele minúscula. Escribir psql -1 (un uno) da el error "-1 sólo puede ser usado en modo no interactivo", que no ayuda nada.
  5. Olvidar el punto y coma. En psql, una sentencia no se ejecuta hasta el ;. Si el prompt cambia de =# a -#, es que sigue esperando.
  6. 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.

  1. Conéctate a northwind y averigua cuántas columnas tiene orders, sin usar SELECT *.
  2. orders tiene 14 columnas y en horizontal no se lee. Consulta una fila y ponla en vertical. ¿En qué casos lo preferirías?
  3. Compara cuánto tarda SELECT count(*) FROM order_details contra SELECT 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.

SolucionesResuélvelos antes de abrir

1.

SELECT count(*) FROM information_schema.columns
WHERE table_name = 'orders' AND table_schema = 'public';

Devuelve 14. O con \d orders, contando.

2. Cuando la tabla es ancha. En DBeaver, en el resultado de la tabla de una consulta: El botón Record debajo de Grid / Text . Se mostrará en vertical la fila seleccionada

3. En DBeaver el tiempo sale solo, abajo en la pestaña de resultados; en psql hay que activar \timing antes. Ambas consultas son instantáneas — 2.155 y 91 filas no son nada. El ejercicio no busca que veas una diferencia, sino que te acostumbres a mirar el tiempo. En una tabla de millones de filas esa costumbre es la que te avisa de que algo va mal antes de que se queje el usuario.

Pregunta de negocio: en este orden.

  1. \dt, o desplegar Tables en el árbol de DBeaver — cuántas tablas hay y cómo se llaman.
  2. La consulta de pg_stat_user_tablescuáles tienen datos de verdad. Con 40 tablas, probablemente 5 concentran el 95% de las filas. Esas son el negocio; el resto son catálogos.
  3. \d —o doble clic en DBeaver— sobre las 3 o 4 tablas más grandes, para entender su grano.
  4. Las columnas de fecha, para saber qué periodo cubre.

En cinco minutos puedes decir: "son ventas, con tantos clientes y tantos pedidos, entre tal y tal fecha, y esto se conecta así". Nada de eso requiere que alguien te explique la base.