2.29.0
2.29.0 (2026-07-28)
Added 9
- Add _timescaledb_functions.decompress_batch() SQL function
- Add compact_chunk() function
- Support concurrent refresh policies on hierarchical continuous aggregates
- Add samplerate argument to _timescaledb_functions.estimate_uncompressed_size()
- Add a compaction policy for unordered chunks
- Add config_merge parameter to alter_job() for merging jsonb into the existing job configuration
- Add recompress_unordered columnstore policy option
- Add helper functions for decoding hypertable status
- Add tsdb.direct_compress storage parameter that allows enabling direct compress for a given hypertable independent of global settings
Changed 9
- Speed up DML operations on hypertables by using optimized TimescaleDB hypertable expansion code instead of generic PostgreSQL inheritance hierarchy expansion
- Speed up expression evaluation in the columnar pipeline by caching common subexpressions
- Speed up some queries with small LIMIT by switching to row-by-row query execution pipeline
- Decompress less data in DML on compressed hypertables by accounting for prepared statement parameters
- Skip classifying compressed relations to speed up planning
- Don't track compressed relations as separate chunk
- Reduce memory usage of INSERT queries using direct compress and spanning multiple chunks
- Don't create separate hypertable catalog entry for hypertables with compression
- Use regclass for storing relation reference in chunk table
Removed 1
- Remove support for PostgreSQL 15
This release contains performance improvements and bug fixes since the 2.28.3 release. We recommend that you upgrade at the next available opportunity.
Release Highlights
- Chunk exclusion for DML operations improves the performance of
UPDATEandDELETEstatements on hypertables. By acquiring row exclusive locks only on the specific chunks being modified rather than the entire hypertable. This enhancement reduces lock contention in high-concurrency workloads involving DML, speeding up the planning of DML queries by using the optimized TimescaleDB chunk exclusion instead of the baseline Postgres constraint exclusion. - The query planner can now choose an additional algorithm for retrieving a small number of rows, for reading the columnstore data, optimizing the default behavior. This optimization improves some last-point queries on columnstore (think
ORDER BY time DESC LIMIT 1) run several times faster than in previous releases.
Important: PostgreSQL 15 Support Removed TimescaleDB 2.29.0 removes support for PostgreSQL 15. This release supports PostgreSQL 16, 17, and 18. If you are still running PostgreSQL 15, upgrade PostgreSQL before upgrading to TimescaleDB 2.29.0.
Backward-Incompatible Changes
- #10041 Remove support for PostgreSQL 15
Features
- #9315 Speed up
DMLoperations on hypertables by using the optimized TimescaleDB hypertable expansion code instead of the generic PostgreSQL inheritance hierarchy expansion - #9534 Speed up expression evaluation in the columnar pipeline by caching common subexpressions
- #9684 Add
_timescaledb_functions.decompress_batch()SQL function - #9732 Speed up some queries with small
LIMITby switching to row-by-row query execution pipeline - #9917 Decompress less data in
DMLon compressed hypertables by accounting for prepared statement parameters - #9957 Add
compact_chunk()function - #10048 Support concurrent refresh policies on hierarchical continuous aggregates
- #10081 Add
samplerateargument to_timescaledb_functions.estimate_uncompressed_size() - #10100 Skip classifying compressed relations to speed up planning
- #10118 Don't track compressed relations as separate chunk
- #10119 Reduce memory usage of
INSERTqueries using direct compress and spanning multiple chunks - #10163 Add a compaction policy for unordered chunks
- #10204 Don't create separate hypertable catalog entry for hypertables with compression
- #10217 Initial placeholder version of granular refresh API
- #10225 Add
config_mergeparameter toalter_job()for mergingjsonbinto the existing job configuration - #10226 Add
recompress_unorderedcolumnstore policy option - #10231 Use
regclassfor storing relation reference in chunk table - #10237 Add helper functions for decoding hypertable status
- #10240 Add the
tsdb.direct_compressstorage parameter that allows enabling direct compress for a given hypertable independent of global settings - #10266 Add
max_batchestocompact_chunk() - #10299 Add
continuous_aggs_tenant_trackingandhypertable_cagg_settingscatalogs
Bugfixes
- #10013 Make ownership error messages on continuous aggregates consistent
- #10052 Result of
MIN/MAXaggregate functions in columnar aggregation pipeline possibly inconsistent with plain PostgreSQL result - #10071 Prune the real-time branch of hierarchical continuous aggregates at any nesting depth
- #10143 Fix division by zero when planning
time_bucketwith zero width - #10199 Fix
initial_starthandling inbuild_job_info - #10213 Cache sort pathkeys per hypertable
- #10221 Fix incremental refresh skipping the last bucket
- #10278 Drop
job_errorsview inbgw_job_stat_historymigration - #10280
RETURNINGclause returned no rows forINSERTusing direct compress - #10281 Disable direct compress when the destination table has an exclusion constraint so the constraint is still enforced
- #10282 Only count directly compressed rows toward the command tag when the
INSERTsets it - #10286 Propagate
VACUUMon a chunk to the compressed relation when running on the chunk directly - #10302 Fix useless-join removal and self-join elimination for hypertables
- #10313 Allow running
ALTER EXTENSION timescaledb UPDATEinside a transaction block - #10315 Fix overlap detection with running max
- #10324 Fix stale index entries after
rebuild_sparse_index()on compressed chunks
GUCs
timescaledb.enable_hypertable_expansion_for_dml: allow using the optimized TimescaleDB hypertable expansion code forUPDATEandDELETEinstead of the generic PostgreSQL inheritance hierarchy expansion. On by default.
Thanks
- @FrancescEthon and @ManuelEthon for reporting an issue with incremental refresh skipping the last bucket
- @h0rn3t for reporting a problem with
VACUUMnot propagating to the compressed relation - @igor2x for reporting an issue with locking during DML statements on hypertables
- @MaximeEthon for reporting an issue with prepared statement parameters in DML decompression
- @proddata for reporting a problem when upgrading from 2.15.3 to 2.28.2
- @tureba for reporting and fixing stale sparse-index entries after rebuild
- @viniciusrsouza for reporting an issue with hierarchical continuous aggregates