What is TimescaleDB?
TimescaleDB is an extension for the PostgreSQL relational database that turns it into a full time series database, adding automatic time-based partitioning (hypertables), columnar compression and continuously updated aggregates. It was launched in 2017 by the company Timescale, which renamed itself Tiger Data in June 2025; the extension itself is still called TimescaleDB. In OT environments and OT convergence projects, TimescaleDB is used for industrial telemetry, IIoT data, process history, energy monitoring and predictive maintenance. Its main advantage is that process data and relational IT data (orders, assets, batches) live in the same database and can be combined with ordinary SQL.
๐ง How does TimescaleDB work?
TimescaleDB runs as an extension inside a normal PostgreSQL server. After loading the library (shared_preload_libraries) and running CREATE EXTENSION timescaledb, everything
PostgreSQL offers remains available: transactions, joins, indexes, user privileges, replication and the
familiar tooling. TimescaleDB adds a set of time series building blocks on top:
| Building block | What it does | Why it matters in OT |
|---|---|---|
| Hypertable | One logical table that is automatically split into chunks per time interval (7 days by default), optionally also by another dimension | Inserts and queries only touch recent or relevant chunks |
| Columnstore (Hypercore) | Converts older chunks to compressed columnar storage, often saving 90% or more | Years of process data stay affordably online |
| Continuous aggregates | Materialised views that refresh automatically and incrementally, for example per-minute or hourly averages | Dashboards read summaries instead of billions of raw rows |
| Retention policy | Drops whole chunks older than a configured age | Cleanup needs no heavy DELETE queries |
| Hyperfunctions |
SQL functions such as time_bucket, first, last, locf, interpolate and time_weight (the latter via the add-on
TimescaleDB Toolkit)
|
Time-weighted averages and gaps in measurement series are handled properly |
| Jobs | Built-in scheduler for compression, retention and aggregation policies | No external cron jobs required |
A typical OT table holds a timestamp, a tag or asset ID, a value and a quality or status code. In TimescaleDB that becomes a hypertable with an index on (tag, time), while an asset hierarchy or ISA-95 model sits alongside it in ordinary relational tables.
๐ How does TimescaleDB differ from a traditional historian?
A classic historian such as AVEVA PI is built for process values, with its own compression algorithms (such as swinging door), a tag database and ready-made connectors to hundreds of control systems. TimescaleDB is a general-purpose database: stronger in SQL and integration, but without the OT-specific layer.
| Property | Traditional historian | TimescaleDB |
|---|---|---|
| Foundation | Proprietary storage engine | PostgreSQL with an extension |
| Query language | Vendor API, sometimes an SQL layer | Standard SQL |
| Connectors to PLC/DCS | Extensive, included | Via a gateway or your own software (OPC UA, MQTT) |
| Compression | Deadband/swinging door at ingest | Columnar compression of older chunks, all values retained |
| Relational data | Limited (asset framework) | Full: joins with orders, batches, maintenance |
| Self-hosted scaling | Vendor-dependent | Vertical plus read replicas |
| Licence | Commercial, often per tag | Apache 2.0 core plus free Timescale License |
In practice, TimescaleDB rarely replaces the site historian entirely. More often it acts as an analytics or data layer above it, or as the storage behind a modern SCADA such as Ignition, which can historise tag data into an SQL database.
๐ญ Where does TimescaleDB fit in an OT architecture?
TimescaleDB is not a real-time control component and does not belong at field level. A realistic placement in the Purdue Model:
| Purdue level | Possible role of TimescaleDB |
|---|---|
| Level 2 | Local storage on an edge server next to SCADA or a small plant |
| Level 3 | Site historian or data layer for MES and OEE reporting |
| Level 3.5 | Replica in the IDMZ, so IT users do not need access to the OT network |
| Level 4 and cloud | Central analytics platform for multiple sites, for example via Tiger Cloud |
Data usually arrives through a gateway: an OPC UA client, an MQTT broker or Unified Namespace with a database writer, Node-RED, Telegraf or an Kafka pipeline. Grafana has a PostgreSQL data source with TimescaleDB support and is the usual visualisation layer. Container images make deployment with Docker or Kubernetes straightforward, including on edge hardware.
๐ง How do you set up TimescaleDB for process data?
A step-by-step approach that works well in OT projects:
- Choose the data model - a narrow model (time, tag ID, value, quality) or a wide model (one column per signal per machine). The narrow model is more flexible when you have thousands of tags.
- Create the hypertable - start with the default 7-day chunk. The vendorโs rule of thumb is that the indexes of the chunks currently being written should fit within about 25% of main memory. On a 64 GB server with 10 GB of index growth per day, a 1-day chunk is a better fit.
- Configure compression - segment by tag or asset ID, order by time, and compress chunks after, say, 7 to 30 days.
- Define continuous aggregates - for example 1-minute and 1-hour averages with min/max, so OEE dashboards and energy reports stay fast.
- Set retention - raw data for perhaps 1 to 2 years, aggregates for 10 years or more, depending on legal and quality requirements.
- Arrange availability and backup - PostgreSQL streaming replication with automatic failover (for example Patroni), plus backups that regularly pass restore tests.
A worked example: 5,000 tags each delivering one value per second produce 432 million rows per day. Uncompressed, that quickly adds up to tens of gigabytes per day; with columnar compression and aggregates, a multi-year history on a single server remains feasible.
๐ Is TimescaleDB open source?
Partly. TimescaleDB has two editions in the same codebase:
-
Apache 2 edition - hypertables, chunk management and basic functions such as
time_bucket,firstandlast. Genuinely open source. - Community edition (Timescale License, TSL) - columnstore/compression, continuous aggregates, retention and job policies, and the advanced hyperfunctions. Free to use, including commercially and inside your own products, but you may not sell the Community edition to others as a database service.
For an industrial company that hosts TimescaleDB itself, the Community edition is almost always usable. Be careful with cloud providersโ managed PostgreSQL services: they often do not offer TimescaleDB at all, or only the Apache 2 edition without compression, continuous aggregates and retention policies. The old multi-node (distributed) cluster was dropped after version 2.13. Since version 2.29 (July 2026), TimescaleDB supports PostgreSQL 16, 17 and 18; support for PostgreSQL 15 was dropped in that release.
๐ How do you secure TimescaleDB in an OT environment?
For cybersecurity, a database full of process data is an attractive target: manipulation undermines the data integrity of reports, and ransomware can make years of history unusable. Because TimescaleDB is PostgreSQL, the usual PostgreSQL hardening measures apply:
| Measure | Implementation |
|---|---|
| Encryption |
TLS enforced in pg_hba.conf
(hostssl), including for replication
|
| Access control | RBAC with separate roles for the writing gateway, readers and administrators |
| Strong authentication | SCRAM-SHA-256; MFA via a jump host or central identity provider, as PostgreSQL itself has no MFA |
| Segmentation | Network segmentation, database in its own zone, IT reads from a replica in the DMZ or IDMZ |
| Telemetry | Set timescaledb.telemetry_level to off in isolated networks |
| Logging and recovery | Audit logging (pgAudit), offline or immutable backups, documented recovery for forensic investigation |
| Patching | Track PostgreSQL and TimescaleDB releases as part of lifecycle management |
Design the environment according to IEC 62443 (zones and conduits), Defense in Depth and Zero Trust principles; NIST SP 800-82 provides additional ICS guidance. At organisational level, ISO 27001 and the NIST CSF build on this. Organisations in scope of the Dutch Cybersecurity Act or NIS2 must also be able to demonstrate such measures.
๐งช Practical example: energy monitoring in a factory
A Dutch food manufacturer wants to link energy consumption per production line to production orders to determine energy per kilogram of product, partly for the energy audit obligation under the EU Energy Efficiency Directive.
| Component | Role |
|---|---|
| Energy meters and PLCs | Supply kWh, gas and compressed air data via Modbus/OPC UA |
| Edge gateway | Publishes values via MQTT to the broker |
| TimescaleDB (Level 3) | Stores raw data, compresses after 14 days, keeps hourly aggregates for 10 years |
| ERP integration | Loads orders and batches into ordinary tables |
| Grafana | Dashboards showing kWh per order and per kilogram |
Because orders and measurements sit in one database, โenergy per orderโ is a single SQL join with time_bucket rather than an export to Excel. The same data later feeds models for AI and anomaly detection. That is exactly where TimescaleDB adds value in IT/OT convergence.
โ Frequently asked questions
Is TimescaleDB free to use?
TimescaleDB is free for self-hosted installations: the core is licensed under Apache 2.0 and the advanced features under the free Timescale License. That licence mainly prohibits offering the Community edition as a database service (DBaaS) to third parties. A managed version is available commercially as Tiger Cloud.
What is the difference between TimescaleDB and InfluxDB?
TimescaleDB is a PostgreSQL extension with standard SQL and full relational features, while InfluxDB is a dedicated time series database with its own storage engine. TimescaleDB is strong when you want to combine process data with relational IT data. InfluxDB is simpler to set up for pure metrics.
Can TimescaleDB replace an industrial historian?
TimescaleDB can take over the storage and analytics function of a historian, but it lacks the bundled connectors to control systems and the OT-specific management layer. That is why it is often used alongside an existing historian, or as the database behind a SCADA package. For new, smaller installations it can be the complete historian.
How much compression does TimescaleDB achieve on process data?
TimescaleDB often saves 90% or more with its columnstore, because consecutive values of a single tag tend to be very similar. The actual ratio depends on segmentation, sort order and the noise in the signal. Always test with a representative dataset.
What is a hypertable in TimescaleDB?
A hypertable is a TimescaleDB table that behaves like one ordinary table for the user but is internally split into chunks per time interval. Queries and inserts only touch the relevant chunks, so performance stays stable as the data grows. Old chunks can be compressed or dropped in one operation.
Is TimescaleDB suitable for the edge?
TimescaleDB runs as a container on common edge servers and industrial PCs, provided there is enough memory and reliable storage. At the edge it buffers locally and replicates, or forwards aggregates to a central database. For very small devices, a lighter solution is often a better fit.
๐ In summary
TimescaleDB turns PostgreSQL into a time series database that brings process data and IT data together in one SQL environment. With hypertables, columnar compression, continuous aggregates and retention policies, it is an open and affordable foundation in the architecture for historisation and analytics in IT/OT convergence, provided you place it in the right Purdue zone and secure it according to IEC 62443.
