Módulo 07

Módulo 07: Persistencia Real con PostgreSQL

Aprende a leer y escribir en bases de datos desde n8n usando el nodo Execute Query. Convierte tus automatizaciones en sistemas con memoria.

Fase 2 · n8n ~60 min Guía práctica

¿Por qué necesitas una base de datos?

Una automatización sin persistencia es como un camarero que nunca anota los pedidos. Puede recibir cientos de webhooks, pero si no guarda los datos en una fuente de verdad, toda la información se pierde en la siguiente ejecución.

Analogía del Archivador

n8n es el empleado que hace el trabajo, SQLite/PostgreSQL es el archivador metálico donde quedan los registros para siempre. Google Sheets es tu pizarra colaborativa visible.

La base de datos cumple tres funciones:

El Nodo Execute Query — Puerta al SQL

El nodo Postgres (y su equivalente MySQL) permite ejecutar instrucciones SQL directamente desde n8n. No necesitas un backend externo.

Parámetro Valor Nota
Host localhost O la IP de tu instancia (ej. 10.0.0.15)
Puerto 5432 PostgreSQL. MySQL usa 3306
Database n8n_db Nombre exacto del schema
User n8n_user Con permisos de escritura
Password tu_contraseña Jamás hardcodees—utiliza Variables o un archivo .env
SSL require (OCI) Obligatorio en producción. En local: disable

Error común

Si configuras la conexión y ves ECONNREFUSED, el contenedor de la base de datos no está accesible o el puerto está cerrado. Verifica con: docker exec n8n nslookup <host>

Operaciones CRUD con SQL

El comportamiento del nodo cambia según la operación seleccionada. Esta tabla resume las 4 operaciones fundamentales con ejemplos reales.

Operación SQL equivalente Escenario n8n típico
Insert INSERT INTO leads (nombre, email) VALUES ('GABRIELES', '@') Post-webhook guarda nuevo lead.
Select SELECT * FROM leads WHERE email = 'pre@ejemplo.com' Verificar si ya existe antes de insertar.
Update UPDATE leads SET status = 'contactado' WHERE id = 42 Marcar lead como completado.
Delete DELETE FROM logs WHERE created_at < now() - 30 Limpiar logs viejos (mantenimiento automático).

Regla de Oro: Parametrización

Nunca concatenes variables en tu sentencia SQL. Usa el modo Query Parameters. Ejemplo: INSERT INTO leads (nombre) VALUES ($1) — y pasas $json.body.nombre como parámetro. n8n la hace segura. Evitas SQL Injection.

Google Sheets — la alternativa NoCode

Cuando no necesitas una base de datos real o tu cliente quiere ver los datos en "excel", el nodo Google Sheets es la respuesta. Autenticación OAuth2 (Google Drive). Usa el modo Append para añadir filas a una hoja existente. Los encabezados de columna deben coincidir exactamente con los campos JSON entrantes — usa el modo Automático: "Automatically map incoming data to matching column names in Postgres" (por el nodo Sheets).

Caso Mejor opción Razón
100 leads/día, integridad críticaPostgreSQLTransacción y soporte de índice
Dashboard visual compartido con el clienteGOM SheetsVisible sin acceso al servidor
Registro de errores en producciónPostgreSQLLos logs no deben ser accesibles desde una URL pública

Checklist del Módulo 07

Desafío de Arquitecto

Webhook → PostgreSQL: Pipeline Persistente

Tu primer cliente te pide un sistema de registro de leads sin base de datos. El proceso esperado:

  1. Crea un workflow con Webhook Trigger (POST, path: /nuevo-lead)
  2. Conecta un nodo Execute Query configurado contra tu PostgreSQL
  3. Usa un Code Node para definir la operación: registro único (verifica si el email ya existe)
  4. Si no existe → INSERT → notifica a Telegram. Si ya existe → Devuelves un mensaje 200 OK diciendo que ya estaba registrado.
  5. Envía un POST desde Postman con JSON válido y verifica que aparezca en tu tabla PostgreSQL