Skip to content
Home › SQL Comparisons › QuestDB vs TimescaleDB
Comparison · Time-Series & IoT

QuestDB vs TimescaleDB

QuestDB and TimescaleDB both let you query time-series data with SQL, but they are built differently. QuestDB is a standalone column-oriented time-series server with SQL extensions such as SAMPLE BY, LATEST ON and ASOF JOIN, reached through the PostgreSQL wire protocol. TimescaleDB is an extension inside PostgreSQL itself, so telemetry sits in ordinary tables next to relational data, with time partitioning, a columnstore, continuous aggregates and retention policies added.

Last verified November 2026. Versions checked: QuestDB 10.1.0, TimescaleDB 2.31.0. Licensing and features change; check the official sources for the latest details.

Quick verdict

Short answer

Our editorial view: choose TimescaleDB when time-series data has to live with relational data (assets, sites, work orders) in one PostgreSQL database, when you need transactions, constraints, updates and the full PostgreSQL ecosystem, and when your team already runs PostgreSQL. Choose QuestDB when the workload is high-rate, append-mostly telemetry in a dedicated store, you want time-series operators such as gap-filled bucketing, latest row per series and as-of joins built into the SQL, and an Apache 2.0 licence for the whole engine. Check licences on both sides: TimescaleDB's columnstore, continuous aggregates and retention policies are under the source-available Timescale License, while QuestDB keeps high availability, TLS and access control for Enterprise.

How we know: This comparison is research-based: architecture, SQL features, ingestion, retention, editions, licences and pricing models follow the site's QuestDB and TimescaleDB guides and the related comparisons, which were checked against the QuestDB documentation, the questdb repository and Enterprise page, the Tiger Data documentation, the timescaledb repository and the Tiger Data pricing page on 27 October 2026; release numbers and the two pricing pages were rechecked on 7 November 2026. Licence terms are summarised and quoted, not legal advice. QuestDB and TimescaleDB SQL are adapted from the vendors' documentation, labelled illustrative and were not run here. We have not run benchmarks; the only performance figures are attributed to the vendor that published them.

This page is for engineers choosing a SQL store for sensor, meter or equipment telemetry who have narrowed the field to two PostgreSQL-flavoured options. Both speak SQL and both accept PostgreSQL drivers, but one is PostgreSQL and the other only talks its wire protocol. For the background on time-series storage, start with the time-series and IoT data hub.

QuestDB describes itself as an open source time-series database engineered for low latency. It stores each column in its own files inside time partitions, sorts every table by a designated timestamp, and compiles filters with a JIT compiler. QuestDB Open Source is under the Apache License 2.0, and QuestDB Enterprise builds on the same core. The latest release on GitHub when checked was 10.1.0 (22 October 2026). See the QuestDB guide.

TimescaleDB, from Tiger Data (formerly Timescale), is a PostgreSQL extension. A hypertable looks like one table but is split automatically into time chunks; older chunks can be converted to the hypercore columnstore, continuous aggregates keep roll-ups current, and retention policies drop whole chunks. The latest release when checked was 2.31.0 (20 October 2026). See the TimescaleDB guide.

Side by side

AspectQuestDBTimescaleDB
What it is Standalone time-series database server (Java with C++ and Rust) Extension loaded into PostgreSQL
Storage Column files per time partition; partitions can be converted to Parquet Rowstore chunks for recent data; hypercore columnstore with compression for older chunks
Time axis Designated timestamp per table; partitions by HOUR, DAY, WEEK, MONTH or YEAR Hypertable chunks, 7 days by default for timestamp columns
SQL SQL with SAMPLE BY, LATEST ON, ASOF JOIN Full PostgreSQL SQL plus time_bucket and other hyperfunctions
PostgreSQL compatibility Partial: PGWire for queries; no SSL, COPY FROM STDIN or DELETE over PGWire It is PostgreSQL: drivers, extensions, roles, transactions and tools work as usual
Ingestion QuestDB clients (QWP), InfluxDB line protocol over HTTP or TCP, PGWire INSERT Any PostgreSQL client: INSERT, COPY, upserts
Duplicates and late data DEDUP UPSERT KEYS per table; out-of-order rows rewrite only affected partitions Primary keys, unique indexes and upserts, including on the columnstore
Roll-ups Materialized views built with SAMPLE BY, each with its own TTL Continuous aggregates refreshed incrementally by policy
Retention TTL per table drops whole partitions (storage policies in Enterprise) add_retention_policy drops whole chunks
High availability Enterprise: replication, automatic failover, read replicas PostgreSQL replication; managed HA replicas on Tiger Cloud
Licence Apache 2.0 for the engine; Enterprise commercial Apache 2 Edition, plus Community Edition under the Timescale License (TSL) for columnstore, continuous aggregates, retention policies and jobs
Managed service QuestDB Enterprise in cloud, on premises, hybrid or BYOC, priced through sales Tiger Cloud on AWS and Azure, with published plans

Key differences

A separate engine versus PostgreSQL itself

The deepest difference is what you operate. TimescaleDB is PostgreSQL with an extension: one server holds telemetry and business tables, so a single query can join hourly chiller roll-ups to open work orders, and roles, backups, replication and monitoring are PostgreSQL's. The cost is that you run PostgreSQL (vacuum, connection pooling, upgrades of both PostgreSQL and the extension).

QuestDB is a separate server designed only for time-series tables. Its PostgreSQL wire protocol is the recommended way to query, so PostgreSQL drivers and many tools connect, but compatibility is partial: the documentation names SSL, COPY FROM STDIN and DELETE statements among unsupported features, and it is not a transactional database for records such as work orders. In our view that makes QuestDB a second database next to your relational system of record, not a replacement for it.

Time-series SQL: built-in operators versus PostgreSQL plus hyperfunctions

QuestDB adds keywords for common time-series questions, all of which need a designated timestamp: SAMPLE BY buckets rows by time with FILL for empty buckets, LATEST ON ... PARTITION BY returns the latest row per series, and ASOF JOIN attaches the most recent matching row from another table, such as the calibration or tariff in force at each reading.

TimescaleDB keeps PostgreSQL SQL and adds functions such as time_bucket. Latest-per-series is DISTINCT ON or a lateral join, and an as-of lookup is a LEFT JOIN LATERAL ... ORDER BY ... LIMIT 1, which the QuestDB guide shows running on plain PostgreSQL. The same 15-minute question in each dialect:

-- Illustrative, not run here: QuestDB syntax from the QuestDB documentation;
-- check it against the documentation for your version before use.
SELECT ts, sensor_id, avg(ppm) AS avg_ppm
FROM zone_co2
WHERE ts >= '2026-11-06' AND ts < '2026-11-07'
SAMPLE BY 15m FILL(PREV);

-- Illustrative, not run here: TimescaleDB syntax from the Tiger Data documentation;
-- check it against the documentation for your version before use.
SELECT time_bucket(INTERVAL '15 minutes', ts) AS bucket, sensor_id, avg(ppm) AS avg_ppm
FROM zone_co2
WHERE ts >= '2026-11-06' AND ts < '2026-11-07'
GROUP BY bucket, sensor_id
ORDER BY bucket, sensor_id;

The QuestDB form fills empty buckets with the previous value; the TimescaleDB form above returns only buckets that have rows (TimescaleDB documents separate gap-filling functions). In our view, QuestDB's operators are shorter for these specific questions, while TimescaleDB gives you the whole of PostgreSQL SQL, including window functions, CTEs and joins to any table.

Ingestion, duplicates and corrections

QuestDB ranks its write paths: its own client libraries over the binary QuestDB Wire Protocol (QWP) first, the InfluxDB line protocol over HTTP or TCP for existing collectors such as Telegraf, and SQL INSERT over PGWire for lower volumes. Partitioned tables use a write-ahead log for concurrent writers, and out-of-order rows rewrite only the partitions they touch. Duplicates are handled by declaring DEDUP UPSERT KEYS, for example on (ts, sensor_id), so a replayed gateway buffer does not add rows. QuestDB reports a peak of 19 million rows per second per instance, measured by QuestDB on version 10.0 over QWP; that is a vendor figure, not an independent result.

TimescaleDB takes writes from any PostgreSQL client; the documentation recommends multi-row INSERT or COPY for high volumes, and throughput depends on batching and PostgreSQL tuning. Corrections are ordinary UPDATE, DELETE or upserts against a primary key, and the documentation says the columnstore accepts them without a manual decompress step. If readings are regularly corrected or deleted after the fact, that is a point for TimescaleDB; see late-arriving and out-of-order data.

Storage, roll-ups and retention

Both drop old data by whole time ranges rather than row by row. QuestDB sets TTL per table, dropping partitions whose whole time range has passed (QuestDB Enterprise replaces TTL with storage policies), and keeps longer-lived roll-ups in materialized views with their own TTL. Open source QuestDB can convert partitions to Parquet with ALTER TABLE; Enterprise tiers cold partitions to object storage automatically.

TimescaleDB converts older chunks to the hypercore columnstore (Tiger Data reports 90 to 98% storage reduction on its pages; measure your own ratio), keeps roll-ups in continuous aggregates that refresh incrementally and survive raw-data retention if the refresh window is set correctly, and drops chunks with add_retention_policy. Tiered storage to object storage is a Tiger Cloud feature. See retention and downsampling for the patterns.

Editions, licences and security

QuestDB: the open source engine is under the Apache License 2.0 and is a single node. Replication with automatic failover, read replicas, TLS on all protocols, single sign-on, role-based access control down to columns, audit logs, automated backups and automatic tiering are QuestDB Enterprise features. Because the open source PGWire endpoint does not support SSL, keep it on a private network or behind a TLS-terminating proxy.

TimescaleDB ships two editions from one repository. The Apache 2 Edition covers hypertables and chunks; the Community Edition, the default, adds the columnstore, continuous aggregates, retention policies and the job scheduler under the Timescale License (TSL), which Tiger Data's editions page now also calls the Tiger Data License. The TSL may be used without charge under its terms, and its section 2.2 prohibits "using any TSL Licensed Software to provide time-sharing services or database-as-a-service services". Security is PostgreSQL security: roles, grants, row-level security and TLS. Run SHOW timescaledb.license; on a managed PostgreSQL service to see which edition you have. Not legal advice: this summarises the licence texts; read them and take advice for your situation.

Pricing and licensing

QuestDB open source carries no licence fee. On 7 November 2026 the questdb.com pricing address showed the Enterprise page, with deployment listed as custom, a free Enterprise trial and "Contact Sales"; no prices were published, so none are quoted.

TimescaleDB self-hosted carries no licence fee: Tiger Data's editions page states that "TimescaleDB Community Edition is completely free if you manage your own service", subject to the TSL. Tiger Cloud lists Performance, Scale and Enterprise plans with compute billed hourly and storage metered by average GB used; the pricing page states that "Storage is priced the same across all regions, but compute prices will vary depending on the region", and offers a 30-day free trial on the Performance plan. We do not quote figures here because the compute prices depend on region and configuration; see TimescaleDB vs InfluxDB for more on the Tiger Cloud billing model. Tiger Data also sells self-managed TimescaleDB Enterprise on quote.

Pricing checked on the vendors' official pages on 7 November 2026. Prices change; confirm before buying.

Where each one leads

QuestDB strengths

  • Time-series operators in SQL: <code>SAMPLE BY</code> with <code>FILL</code>, <code>LATEST ON</code>, <code>ASOF JOIN</code>
  • Column-oriented, time-partitioned engine built for append-mostly telemetry
  • Deduplication and TTL declared per table
  • Accepts InfluxDB line protocol, so existing Telegraf feeds can write to it
  • Whole engine under Apache 2.0

TimescaleDB strengths

  • It is PostgreSQL: joins, transactions, constraints, extensions and tools on the same tables as telemetry
  • Continuous aggregates refresh incrementally and can outlive raw data
  • Columnstore accepts inserts, updates, deletes and upserts
  • Managed Tiger Cloud with published plans, tiered storage and HA replicas
  • Team skills and operations carry over from PostgreSQL

Limitations

QuestDB limitations

  • PGWire compatibility is partial: no SSL, <code>COPY FROM STDIN</code> or <code>DELETE</code>
  • Not a transactional database for business records
  • Open source is single node; HA, TLS, RBAC and automatic tiering are Enterprise features
  • No published price list for Enterprise

TimescaleDB limitations

  • Columnstore, continuous aggregates and retention policies need the TSL-licensed Community Edition
  • Some managed PostgreSQL services offer only the Apache 2 Edition
  • You operate PostgreSQL as well as the extension: vacuum, pooling, two upgrade paths
  • Write throughput depends on batching and PostgreSQL tuning; one writable primary when self-hosted

When to choose each

Choose QuestDB if

  • You want a dedicated, high-rate telemetry store queried with SQL
  • Queries need gap-filled buckets, latest-per-series or as-of joins to calibration or tariff tables
  • Collectors already send InfluxDB line protocol
  • Licence policy favours Apache 2.0 for the whole engine

Choose TimescaleDB if

  • Readings must be joined with assets, sites and work orders in one database
  • You need transactions, constraints, updates and deletes on telemetry
  • Your team already runs PostgreSQL and wants to keep one engine
  • You want a managed service with published plans (Tiger Cloud)

When neither is right

Final recommendation

Bottom line

Our editorial view: TimescaleDB is the more direct fit when telemetry is part of a relational application and your team already runs PostgreSQL, with the caveat that its most useful time-series features sit under the Timescale License. QuestDB is the more direct fit for a dedicated, append-mostly telemetry store with time-series operators in SQL and an Apache 2.0 engine, with the caveat that it is a second database with partial PostgreSQL compatibility and that HA and security features are in Enterprise. Both vendors publish their own performance claims; test both with your own point count, write batches, late-data rate and dashboard queries.

Frequently asked questions

Is QuestDB a PostgreSQL extension like TimescaleDB?

No. QuestDB is a separate database server that implements the PostgreSQL wire protocol, so PostgreSQL drivers can query it, with some features unsupported (SSL, COPY FROM STDIN and DELETE over PGWire). TimescaleDB is an extension that runs inside PostgreSQL.

Which is faster, QuestDB or TimescaleDB?

There is no neutral, like-for-like benchmark to settle it. QuestDB reports a peak of 19 million rows per second per instance on its own tests; Tiger Data reports columnstore compression of 90 to 98% on its pages. These are vendor figures on vendor-chosen setups. Test with your own data and queries.

Are QuestDB and TimescaleDB open source?

QuestDB Open Source is under the Apache License 2.0. TimescaleDB's Apache 2 Edition is under Apache 2.0, while the Community Edition, which adds the columnstore, continuous aggregates and retention policies, is source-available under the Timescale License with a database-as-a-service restriction. This is a summary, not legal advice.

Can I join telemetry with business tables?

In TimescaleDB, yes, with ordinary PostgreSQL joins in the same database. QuestDB supports joins between its own tables, but business records such as work orders usually stay in a relational database, so cross-system joins happen in the application, a BI tool or a warehouse.

How do they handle duplicate readings?

QuestDB deduplicates when a table declares DEDUP UPSERT KEYS, for example on the timestamp and sensor ID. TimescaleDB uses PostgreSQL primary keys or unique indexes with INSERT ... ON CONFLICT upserts.

Sources

Checked November 2026.

How we research comparisons: our editorial method.

More comparisons

Browse all SQL comparisons or the tools directory.