On this page
Note
No dedicated time-series engine in v0.1.0: no hypertables, continuous aggregates, retention, or downsampling. Time-series = temporal columns + SQL + ts indexes + columnar DeltaBitpack/Rle + zone-map/BRIN pruning. Anything beyond that is roadmap.
Query patternsWindows, rollups, FILTER aggregates, keyset feeds
Temporal referenceLiterals, arithmetic, EXTRACT, precision
Model#
CREATE TABLE events (
id BIGINT PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL,
kind TEXT NOT NULL,
payload JSONB
);
CREATE INDEX events_ts_idx ON events (ts);One row per event, ts indexed, hot JSON dimensions in payload. Columnar flush encodes timestamp runs (DeltaBitpack) and sorted keys (Rle); scans prune by ZoneMap → BRIN → XOR → Roaring → exact.
flowchart LR
I["INSERT event"] --> IDX["B-tree ts index"]
I --> COL["columnar flush\nDeltaBitpack timestamps"]
Q["time-window query"] --> PR["ZoneMap → BRIN → XOR → Roaring → exact"]
PR --> R["matching rows"]Diagram source · mermaidcopy included
flowchart LR
I["INSERT event"] --> IDX["B-tree ts index"]
I --> COL["columnar flush\nDeltaBitpack timestamps"]
Q["time-window query"] --> PR["ZoneMap → BRIN → XOR → Roaring → exact"]
PR --> R["matching rows"]What works / what doesn't#
| Need | v0.1.0 |
|---|---|
| Insert events, query windows, order, aggregate | Supported |
date_trunc rollups, FILTER splits |
Supported |
| Retention/downsampling/continuous agg | Not available — roll up on read or delete old partitions manually |
| Gap-filling / interpolation | Not available — outer-join a generate_series calendar (see queries) |
Related#
Was this page helpful? Thanks — noted locally, nothing is sent anywhere.