Skip to main content
[ PIER ]

TimescaleDB

PostgreSQL extendido para series temporales — al precio de PostgreSQL.

Database #sql#relational#time-series#timescale#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. 1 Abre el panel de Pier y haz clic en Add service.
  2. 2 Elige TimescaleDB 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 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

Crear una hypertable sql
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);
Agregado continuo (rollup de 5 minutos) sql
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');
Compresión + retención sql
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');
Consultar un rango temporal sql
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?
Sí. La edición Community (Timescale License + Apache 2.0 para el core) se distribuye en la imagen Docker oficial e incluye hypertables, compresión, agregados continuos, retención y políticas de reordenamiento. Pier despliega la imagen Community — sin claves de licencia, sin telemetría.
¿En qué se diferencia de PostgreSQL plano con una columna TIMESTAMPTZ?
Postgres plano funciona a baja escala pero se degrada rápido — tablas únicas enormes, DELETEs caros para retención, sin compresión columnar, consultas analíticas lentas. TimescaleDB añade chunking automático, awareness del planificador, 90%+ de compresión, agregados continuos y retención automatizada — todo transparente para tu aplicación.
¿Puedo usar mi ORM actual (Prisma, SQLAlchemy, GORM, ActiveRecord)?
Sí. El protocolo, los catálogos del sistema y el DDL son PostgreSQL puro. Los ORMs ven una tabla regular; los internos de hypertable son transparentes. Las migraciones funcionan vía pg_dump/pg_restore.
¿Cuál es el volumen máximo de datos?
Los despliegues de producción suelen correr 100+ TB y billones de filas por nodo. La compresión típicamente da 10–20× en datos de series temporales, así que un dataset crudo de 1 TB cabe en ~50–100 GB en disco.
¿Cómo migro desde InfluxDB o PostgreSQL plano?
Desde Postgres — SELECT create_hypertable() sobre la tabla existente; las filas existentes se convierten en un único chunk. Desde Influx — usa la herramienta outflux o escribe una pequeña importación CSV; los tags pasan a columnas indexadas, los fields a columnas double precision.
¿Soporta agregados continuos en hypertables con compresión habilitada?
Sí. Los agregados continuos corren sobre chunks comprimidos de forma transparente desde TimescaleDB 2.x — no hace falta elegir entre rendimiento y compresión.
¿Qué versión despliega Pier?
Por defecto latest-pg17 (PostgreSQL 17 + el último build de TimescaleDB), con latest-pg18 disponible. Ambas son las imágenes oficiales Community de timescale/timescaledb en Docker Hub.

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 →