TimescaleDB
PostgreSQL extendido para series temporales — al precio de PostgreSQL.
TimescaleDB es una extensión de PostgreSQL que convierte Postgres en una base de datos de series temporales de alto rendimiento. El mismo SQL, los mismos drivers, las mismas herramientas de administración — pero con hypertables, compresión columnar, agregados continuos y políticas de retención integradas.
Desplegar con Pier
- 1 Abre el panel de Pier y haz clic en Add service.
- 2 Elige TimescaleDB en la lista de plantillas.
- 3 Elige la versión, asigna un nombre al servicio y Pier provisionará automáticamente el contenedor, el almacenamiento y los puertos.
- 4 Vincula un dominio si quieres HTTPS. Traefik genera el certificado de Let's Encrypt automáticamente.
¿Qué es TimescaleDB?
TimescaleDB es una extensión de PostgreSQL — no una base de datos aparte. La
instalas en un cluster Postgres regular, ejecutas CREATE EXTENSION timescaledb
y tus tablas existentes pueden convertirse en hypertables con una sola llamada
a función.
Por debajo, una hypertable se ve como una tabla normal para tu aplicación, pero está particionada silenciosamente por tiempo en “chunks” — típicamente un chunk por día o semana. Las nuevas escrituras fluyen al chunk más reciente; los chunks antiguos pueden comprimirse, reordenarse o eliminarse automáticamente.
El resultado: conservas la semántica transaccional de PostgreSQL, joins, foreign keys, índices, JSONB, búsqueda full-text, geoespacial (PostGIS) y todo el ecosistema de drivers, ORMs y herramientas — mientras obtienes rendimiento de series temporales comparable al de bases de datos columnares específicas.
Cómo lo despliega Pier
Pier usa la imagen oficial timescale/timescaledb de Docker Hub. La versión por
defecto es latest-pg17 (PostgreSQL 17 con el último build de TimescaleDB);
latest-pg18 también está disponible en el selector. El volumen de datos se
monta en /var/lib/postgresql/data — la ubicación estándar de PGDATA para
esta imagen.
Al crear el servicio, Pier genera una contraseña fuerte, provisiona un volumen persistente, expone el puerto 5432 internamente en la red de Pier y opcionalmente lo publica vía Traefik. Backups, restauración point-in-time, rotación de contraseña y generación de connection strings funcionan igual que con la plantilla regular de PostgreSQL — TimescaleDB es compatible a nivel de protocolo con Postgres, así que el tooling de administración es idéntico.
Cuándo NO usar TimescaleDB
Si tu workload es OLTP puro sin componente de series temporales, PostgreSQL regular es más simple y ligero. Si necesitas analítica a escala de petabytes sobre datos columnares muy amplios y no necesitas joins ni mutabilidad, ClickHouse puede encajar mejor. Si solo necesitas scraping de métricas efímero para una flota pequeña, Prometheus plano sin almacenamiento de largo plazo suele bastar.
En todos los demás casos — métricas de aplicación, IoT, eventos, logs, datos financieros, dashboards en tiempo real — TimescaleDB acierta en el punto dulce del “SQL aburrido que escala”.
Características clave
Hypertables
Tablas auto-particionadas por tiempo. Inserta como en una tabla normal; el planificador enruta de forma transparente entre chunks. Inserciones de milisegundos a cientos de miles de filas por segundo en un VPS de 5 dólares.
Agregados continuos
Vistas materializadas con refresco incremental sobre datos agrupados por buckets de tiempo. Consultas en menos de un segundo sobre años de filas crudas sin recalcular.
Compresión columnar
90–98% de compresión en datos de series temporales sin reescribir consultas. Los chunks comprimidos siguen siendo consultables y modificables.
Políticas de retención
Elimina chunks viejos automáticamente por edad. Sin bloat de DELETE, sin tunear vacuum manualmente, sin cron jobs.
100% PostgreSQL
psql, pg_dump, pgBouncer, Prisma, SQLAlchemy, GORM, Hasura, PostGIS — cualquier cosa que hable PostgreSQL simplemente funciona. Joins, foreign keys, transacciones, ACID — todo intacto.
Planificador de jobs integrado
Jobs en background para compresión, retención, refresco y funciones de usuario personalizadas — sin programador externo ni contenedor de cron.
Casos de uso
Métricas de aplicación & APM
Reemplaza los stacks de Prometheus + remote-write con un único store compatible con Postgres. Datasource nativo de TimescaleDB en Grafana.
IoT y datos de sensores
Ingesta cientos de miles de puntos por segundo desde dispositivos. Consulta la última hora con latencia de milisegundos, los últimos 10 años desde chunks comprimidos.
Datos de tick financieros
Velas OHLC vía agregados continuos, backtests sub-segundo, traza de auditoría a nivel tick sin renunciar a los joins SQL.
Dashboards de analítica en tiempo real
Alimenta dashboards de Power BI / Metabase / Grafana directamente desde datos de eventos en vivo. Sin ETL, sin arquitecturas lambda, sin store OLAP aparte.
Logs y eventos
Almacenamiento de logs estructurados con columnas JSONB y semántica de series temporales. Reemplaza ELK/Loki para volúmenes de logs bajos a medios.
Ejemplos de código
CREATE TABLE metrics (
time TIMESTAMPTZ NOT NULL,
device TEXT NOT NULL,
value DOUBLE PRECISION
);
SELECT create_hypertable('metrics', 'time');
CREATE INDEX ON metrics (device, time DESC); CREATE MATERIALIZED VIEW metrics_5m
WITH (timescaledb.continuous) AS
SELECT time_bucket('5 minutes', time) AS bucket,
device,
avg(value) AS avg,
max(value) AS max,
min(value) AS min,
count(*) AS n
FROM metrics
GROUP BY bucket, device;
SELECT add_continuous_aggregate_policy('metrics_5m',
start_offset => INTERVAL '7 days',
end_offset => INTERVAL '5 minutes',
schedule_interval => INTERVAL '5 minutes'); ALTER TABLE metrics SET (
timescaledb.compress,
timescaledb.compress_segmentby = 'device'
);
SELECT add_compression_policy('metrics', INTERVAL '7 days');
SELECT add_retention_policy('metrics', INTERVAL '1 year'); SELECT time_bucket('1 hour', time) AS hour,
device,
avg(value)
FROM metrics
WHERE time > now() - INTERVAL '24 hours'
GROUP BY hour, device
ORDER BY hour; Comparativa
| vs PostgreSQL | TimescaleDB ES PostgreSQL con una extensión de series temporales. Úsalo cuando tu workload combine series temporales con datos transaccionales — una sola base de datos, mantén la ergonomía de Postgres. |
| vs InfluxDB | Influx usa su propio lenguaje de consulta (Flux/InfluxQL) y carece de joins, foreign keys y ecosistema SQL. TimescaleDB conserva SQL, joins, transacciones y tu ORM actual. |
| vs ClickHouse | ClickHouse gana en throughput OLAP en alta cardinalidad. TimescaleDB gana en consistencia a nivel fila, joins, mutabilidad y encaje con el ecosistema Postgres. |
| vs Prometheus | Prometheus es un sistema de monitorización por scraping, no un store de largo plazo. Usa TimescaleDB como backend durable (remote_write) y deja Prometheus para el scraping de corto plazo. |
Preguntas frecuentes
¿TimescaleDB es gratuito?
¿En qué se diferencia de PostgreSQL plano con una columna TIMESTAMPTZ?
¿Puedo usar mi ORM actual (Prisma, SQLAlchemy, GORM, ActiveRecord)?
¿Cuál es el volumen máximo de datos?
¿Cómo migro desde InfluxDB o PostgreSQL plano?
¿Soporta agregados continuos en hypertables con compresión habilitada?
¿Qué versión despliega Pier?
Servicios relacionados
Desplegar en tu VPS
TimescaleDB es una extensión de PostgreSQL que convierte Postgres en una base de datos de series temporales de alto rendimiento. El mismo SQL, los mismos drivers, las mismas herramientas de administración — pero con hypertables, compresión columnar, agregados continuos y políticas de retención integradas.
Desplegar este servicio →