TimescaleDB 2.29 focuses on the columnstore: faster analytical and last-point queries, and cheaper continuous aggregate refresh through incremental and concurrent execution. TimescaleDB 2.29.0 was released on GitHub on July 28, 2026, and is delivered to Tiger Cloud, along with the 2.29.1 stability and security patch, starting August 10, 2026. This release also removes support for PostgreSQL 15.
Highlighted features in TimescaleDB v2.29
Section titled “Highlighted features in TimescaleDB v2.29”Faster analytical queries on the columnstore
This release keeps more query patterns on the vectorized columnar execution engine and adds faster paths for point and last-value lookups.
- Common subexpression elimination in columnar aggregation: When several aggregates reference the same expression — for example
SUM(price * quantity)andAVG(price * quantity)— the executor now computes it once and reuses the result across aggregates. first/lastinColumnarIndexScan:first(value, time)andlast(value, time)can now read from sparsemin/maxmetadata in theColumnarIndexScanpath, so common earliest/latest-value queries skip decompressing full batches.- Faster last-point and point queries: The planner can now choose a row-by-row decompression path for startup-cost-sensitive queries such as
ORDER BY time DESC LIMIT 1and selective point lookups, making last-point queries several times faster. MIN/MAXcorrectness: Corrects a case whereMINandMAXin the columnar aggregation pipeline could disagree with plain PostgreSQL results.
More flexible continuous aggregate refresh
Continuous aggregates gain incremental and concurrent refresh, lowering the cost and lock footprint of keeping aggregates current.
-
Forced refreshes are now incremental by default: Building on the batched manual refresh introduced in 2.28, forced runs of
refresh_continuous_aggregate()now execute incrementally by default, and you gain finer control over batch size, per-execution limits, and iteration order through the JSONB options argument.CALL refresh_continuous_aggregate('my_cagg', '2023-01-01', '2024-01-01',options => '{"buckets_per_batch": 20, "max_batches_per_execution": 5, "refresh_newest_first": true}'::jsonb); -
Concurrent refresh policies on hierarchical continuous aggregates: You can now attach more than one refresh policy to a hierarchical continuous aggregate at a time, enabling tiered refresh strategies built from multiple non-overlapping policies.
-
Hierarchical continuous aggregate fixes: For a continuous aggregate built on top of another continuous aggregate, the planner now correctly prunes the real-time branch (the live overlay that unions not-yet-materialized recent data onto the stored results) at any level of nesting, so queries that don't need it avoid the extra scan. A separate fix keeps incremental refresh from leaving the final time bucket un-refreshed.
Smarter query planning
- Self-join elimination for hypertables: Useless-join removal and self-join elimination now work correctly on hypertables, removing redundant scans.
- Lower planning overhead on compressed data: The planner skips classifying compressed relations and caches sort pathkeys per hypertable, reducing planning time on hypertables with many compressed chunks.
Quality of life and operability
VACUUMpropagation: RunningVACUUMon a chunk now also propagates to its compressed relation.- Merge job configuration:
alter_job()adds aconfig_mergeparameter that merges JSONB into an existing job configuration instead of replacing it — for example,SELECT alter_job(42, config_merge => '{"max_retries":3}'::jsonb). - In-place sparse index maintenance:
_timescaledb_functions.rebuild_sparse_index()rebuilds sparse-index metadata on an already-compressed chunk, with a fix for stale entries left after a rebuild. - New maintenance helpers: Adds
decompress_batch()and asamplerateargument onestimate_uncompressed_size(). - Transactional extension update:
ALTER EXTENSION timescaledb UPDATEcan now run inside a transaction.
Backward-incompatible changes
Section titled “Backward-incompatible changes”- PostgreSQL 15 support removed: TimescaleDB 2.29 drops support for PostgreSQL 15, completing the previously announced EOL. Move to PostgreSQL 16 or 17 before upgrading.
job_errorsview removed: Removed as part of thebgw_job_stat_historymigration. Querybgw_job_stat_historyfor job error history instead.
Stability and security patch (2.29.1)
Section titled “Stability and security patch (2.29.1)”2.29.1 addresses stability issues; adds missing permission checks for internal chunk functions; and adds an ordered-scan path for hypertable max-time lookups. It also addresses security vulnerabilities (advisory; PRs #10360, #10379, #10386); upgrade at your next opportunity.
For complete details, refer to the TimescaleDB 2.29.0 release notes and 2.29.1 release notes.






























































