Skip to main content
[ PIER ]

PostgreSQL

La base de datos relacional open-source más avanzada del mundo.

Database Listo para clúster #sql#relational

PostgreSQL es una base de datos SQL probada en batalla, totalmente compatible con ACID, con soporte nativo para JSONB, búsqueda full-text, índices geoespaciales y un enorme ecosistema de extensiones. Pier despliega la imagen Docker oficial con backups automáticos, restauración point-in-time y réplicas en un clic.

Desplegar con Pier

  1. 1 Abre el panel de Pier y haz clic en Add service.
  2. 2 Elige PostgreSQL en la lista de plantillas.
  3. 3 Elige la versión, asigna un nombre al servicio y Pier provisionará automáticamente el contenedor, el almacenamiento y los puertos.
  4. 4 Vincula un dominio si quieres HTTPS. Traefik genera el certificado de Let's Encrypt automáticamente.

¿Qué es PostgreSQL?

PostgreSQL (“Postgres”) es una base de datos objeto-relacional open-source que lleva más de 30 años en desarrollo activo. Es la elección por defecto para nuevos backends de aplicaciones en todas las industrias — desde startups unipersonales hasta Apple, Instagram, Reddit y la mayor parte del sector bancario europeo.

Lo que lo distingue de MySQL y otras bases de datos “fáciles” es la profundidad de su sistema de tipos, planificador de consultas y modelo de extensiones. JSONB le permite actuar como una base de datos documental. PostGIS lo convierte en un servidor geoespacial. pgvector lo convierte en motor de búsqueda vectorial. TimescaleDB añade series temporales. Rara vez se “supera” Postgres — se crece encima de él con extensiones.

Cómo lo despliega Pier

Pier usa la imagen Docker oficial postgres, montando /var/lib/postgresql como volumen de datos. La versión por defecto es latest (actualmente PostgreSQL 18); también están disponibles 18-alpine, 17-alpine y 16-alpine.

Para despliegues de un solo nodo, Pier provisiona una contraseña fuerte, crea el contenedor, expone el puerto 5432 internamente y (opcionalmente) publica vía Traefik. Para despliegues en clúster, Pier cambia a la imagen bitnami/postgresql que soporta replicación por streaming out-of-the-box — 1 primary + N réplicas de lectura, configurable de 2 a 5 nodos en total.

Los backups corren en un horario (por base de datos o cluster-wide) usando formato custom de pg_dump. Los backups pueden subirse a cualquier almacenamiento compatible con S3 configurado en los S3 Storages de Pier.

Cuándo NO usar PostgreSQL

Para aplicaciones embebidas, mono-proceso, SQLite es más simple y ligero. Para cargas puramente key-value sin relaciones y objetivos de latencia sub- milisegundo, Redis o Valkey encajan mejor. Para OLAP a escala de petabytes sin requisitos transaccionales, ClickHouse gana en throughput puro.

Para casi todo lo demás — Postgres.

Características clave

ACID completo y MVCC

Aislamiento serializable real, foreign keys, triggers, procedimientos almacenados (plpgsql, Python, JS, Rust). Concurrencia multi-versión sin locks de lectura.

Sistema de tipos rico

JSONB nativo con índices y operadores, arrays, ranges, UUID, tipos geométricos, tipos personalizados, enums. JSONB es lo bastante rápido como para que Postgres a menudo reemplace bases de datos documentales.

Replicación por streaming y WAL

Réplicas físicas síncronas o asíncronas, replicación lógica para migraciones cross-version y CDC, restauración point-in-time vía archivado de WAL.

Rendimiento a cualquier escala

Planificador basado en costes con scans paralelos, índices BRIN para tablas de mil millones de filas, particionado por range/list/hash, índices parciales y de expresión.

Ecosistema de extensiones

PostGIS (geoespacial), TimescaleDB (series temporales), pgvector (embeddings IA), pg_partman, pg_stat_statements, pg_repack, foreign data wrappers — Postgres es una base de datos en la que creces.

Listo para clúster en Pier

1 primary + N réplicas de lectura con replicación por streaming vía la imagen bitnami/postgresql. Pier gestiona healthchecks y enrutamiento de conexiones.

Casos de uso

Backend de aplicaciones SaaS

La elección por defecto para nuevos backends. Funciona con Prisma, Sequelize, SQLAlchemy, Hibernate, GORM, ActiveRecord, Diesel — todos los ORMs principales.

Datos multi-tenant con row-level security

Políticas nativas de seguridad a nivel de fila imponen aislamiento de tenants en la base de datos, no en la aplicación — multi-tenancy a prueba de fugas.

Cargas geoespaciales (con PostGIS)

Mapas, routing, geofencing, seguimiento de flotas — PostGIS añade 1000+ funciones espaciales, índices R-tree, proyecciones y topología.

IA / búsqueda vectorial (con pgvector)

Almacena y consulta embeddings de 1536 dimensiones con índices HNSW o IVFFlat. Sáltate la DB vectorial dedicada si Postgres ya tiene tus otros datos.

Origen de analítica y BI

Conecta Metabase, Superset, Grafana, Tableau directamente. Vistas materializadas y particionado manejan cientos de millones de filas cómodamente.

Ejemplos de código

Crear tabla con constraints e índices sql
CREATE TABLE users (
  id          BIGSERIAL PRIMARY KEY,
  email       TEXT UNIQUE NOT NULL,
  created_at  TIMESTAMPTZ NOT NULL DEFAULT now(),
  profile     JSONB NOT NULL DEFAULT '{}'::jsonb
);

CREATE INDEX users_created_idx ON users (created_at DESC);
CREATE INDEX users_profile_gin ON users USING gin (profile);
Consulta JSONB con operador sql
SELECT id, email
FROM users
WHERE profile @> '{"plan": "pro"}'
  AND (profile->>'signups')::int > 5
ORDER BY created_at DESC
LIMIT 50;
Row-level security para multi-tenancy sql
ALTER TABLE invoices ENABLE ROW LEVEL SECURITY;

CREATE POLICY tenant_isolation
ON invoices
FOR ALL
USING (tenant_id = current_setting('app.tenant_id')::uuid);

-- Por petición:
SET app.tenant_id = '550e8400-e29b-41d4-a716-446655440000';
Particionado por rango mensual sql
CREATE TABLE events (
  id BIGSERIAL,
  occurred_at TIMESTAMPTZ NOT NULL,
  payload JSONB
) PARTITION BY RANGE (occurred_at);

CREATE TABLE events_2026_05 PARTITION OF events
FOR VALUES FROM ('2026-05-01') TO ('2026-06-01');

Comparativa

vs MySQL / MariaDB MySQL es más simple y sigue siendo rápido en lo básico, pero Postgres gana en JSON, búsqueda full-text, geoespacial, índices parciales, CTEs y conformidad con el estándar SQL. Elige Postgres para cualquier cosa no trivial.
vs MongoDB El JSONB de Postgres iguala la flexibilidad de Mongo manteniendo joins, transacciones y SQL. La mayoría de equipos que eligieron Mongo por "flexibilidad de esquema" acabaron migrando de vuelta.
vs SQLite SQLite es imbatible para uso embebido y apps de un solo escritor. Postgres toma el relevo cuando necesitas escrituras concurrentes, acceso por red o replicación.
vs Postgres gestionado (RDS, Cloud SQL, Supabase) Autohospedar en Pier te da el mismo Postgres a una fracción del coste — ahorros típicos 10–30× para cargas pequeñas/medianas. Renuncias a la UI SaaS pero ganas control y portabilidad.

Preguntas frecuentes

¿Qué versión de PostgreSQL despliega Pier por defecto?
El default es `latest` (PostgreSQL 18 al momento de escribir esto). El selector también incluye 18-alpine, 17-alpine y 16-alpine. Fija una versión mayor específica en producción para que futuras actualizaciones de imagen no disparen un upgrade mayor inesperado.
¿Los backups son automáticos?
Pier incluye backups programados por base de datos y cluster-wide (formato pg_dump custom) con destinos S3 opcionales. La restauración point-in-time vía archivado de WAL está en la hoja de ruta.
¿Puedo correr réplicas?
Sí — la plantilla PostgreSQL soporta clústers de 2 a 5 nodos (1 primary + N réplicas de lectura) usando la replicación por streaming de bitnami/postgresql.
¿Cómo añado extensiones como PostGIS o pgvector?
Para PostGIS usa la plantilla dedicada de PostGIS (PostgreSQL + extensión empaquetada). Para pgvector y otras, ejecuta dentro del contenedor y CREATE EXTENSION manualmente, o instala vía una imagen personalizada.
¿Soporta row-level security?
Sí — RLS completo vía CREATE POLICY. Usado frecuentemente para imponer aislamiento de tenants en SaaS multi-tenant sin filtrado del lado de la app.
¿Qué puertos están expuestos?
5432/tcp por defecto. Pier enruta tráfico por la red interna; expón externamente vía Traefik solo si es estrictamente necesario.
¿Mi ORM existente (Prisma, Sequelize, Diesel) puede conectar?
Sí, todos los ORMs principales tienen soporte de primera clase para Postgres. Conecta vía el URI estándar `postgresql://user:pass@host:5432/db` que Pier muestra en la página del servicio.

Servicios relacionados

Desplegar en tu VPS

PostgreSQL es una base de datos SQL probada en batalla, totalmente compatible con ACID, con soporte nativo para JSONB, búsqueda full-text, índices geoespaciales y un enorme ecosistema de extensiones. Pier despliega la imagen Docker oficial con backups automáticos, restauración point-in-time y réplicas en un clic.

Desplegar este servicio →