Qué es PostgreSQL
PostgreSQL es una base de datos relacional de código abierto. Guarda la información en tablas relacionadas entre sí, garantiza que las operaciones se completen enteras o no se apliquen, y ofrece tipos avanzados como JSON o rangos de fechas. Es la base de datos que elijo por defecto para casi todo lo que construyo.
Cómo la uso
Trato el esquema como parte del código. Cada cambio va en una migración SQL con fecha, revisada y guardada en el repositorio. En los proyectos donde controlo el despliegue, las migraciones se aplican solas al arrancar el contenedor: cada fichero corre en su propia transacción, queda anotado en una tabla de control y un bloqueo consultivo de PostgreSQL evita que dos instancias intenten migrar a la vez.
Prefiero que la base de datos haga cumplir las reglas importantes. Uso restricciones CHECK para importes positivos, estados permitidos o formatos de fecha; claves foráneas con borrado en cascada donde tiene sentido; e índices únicos parciales cuando un dato solo debe ser único si existe (por ejemplo, un email opcional).
Según el proyecto, accedo a PostgreSQL de tres maneras:
- SQL directo con el driver
pgcuando necesito control fino. En el backend de un panel de administración tengo upserts conON CONFLICT, bloqueos por transacción para serializar operaciones sobre un mismo recurso y una cola de trabajos conFOR UPDATE SKIP LOCKED, que permite repartir tareas sin que dos procesos cojan la misma. - Prisma cuando el modelo es muy de negocio y conviene tener tipos generados en TypeScript. Aun así, escribo SQL a mano para lo que el ORM no cubre bien.
- Supabase, que es PostgreSQL gestionado, cuando quiero autenticación y políticas de acceso por filas sin montar un backend completo.
También uso JSONB para datos semiestructurados y LISTEN para avisar de cambios en tiempo real.
Proyectos donde la he usado
- RustCommander, mi panel para administrar servidores de Rust: histórico de jugadores, auditoría, suscripciones y tareas programadas sobre PostgreSQL con SQL directo.
- Grupote, una app de finanzas personales y cuentas compartidas, con PostgreSQL y Prisma. En local arranco un PostgreSQL embebido para no depender de Docker.
- Phu Yao, la web y el área de cliente de una escuela de Muay Thai y MMA en Vila-real: socios, reservas de clases, tienda y finanzas.
- Un TPV para un local de hostelería y una aplicación de gestión para un centro de ocio, ambos con PostgreSQL y SQL directo.
- Esta misma web: las solicitudes de presupuesto se guardan en PostgreSQL.
Cuándo la recomiendo y cuándo no
La recomiendo casi siempre que haya datos que deben estar bien: reservas, pedidos, facturación, usuarios con permisos.
No la recomiendo para una web informativa sin formularios ni área privada: ahí no hace falta base de datos. Tampoco es la mejor opción si tu equipo ya trabaja con otra base de datos y el proyecto no tiene una razón clara para cambiar.
Preguntas frecuentes
¿PostgreSQL tiene coste de licencia?
No. Es software libre. Pagas el servidor donde se aloja, sea propio o un servicio gestionado.
¿Puedo migrar mis datos desde Excel o desde otra aplicación?
Normalmente sí: se limpian los datos, se define el esquema y se escribe un script de importación que se puede repetir hasta que el resultado es correcto.
¿Qué pasa si hay que cambiar la estructura más adelante?
Para eso están las migraciones: cada cambio queda registrado y se aplica igual en pruebas y en producción.
¿Tienes un proyecto que necesita una base de datos sólida? Pídeme presupuesto y lo vemos.