Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .unreleased/allow-alter-extension-in-transaction

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/alter_job_config_merge

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/columnar-cache

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/fix_direct_compress_cansettag

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/fix_direct_compress_exclusion

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/fix_direct_compress_returning

This file was deleted.

2 changes: 0 additions & 2 deletions .unreleased/fix_vacuum_compressed_chunk

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/leak-direct

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/min-nan

This file was deleted.

2 changes: 0 additions & 2 deletions .unreleased/param-eval

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10010

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10013

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10041

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10048

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10081

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10118

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10143

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10163

This file was deleted.

2 changes: 0 additions & 2 deletions .unreleased/pr_10175

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10199

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10204

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10213

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10217

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10226

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10231

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10237

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10240

This file was deleted.

2 changes: 0 additions & 2 deletions .unreleased/pr_10242

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10266

This file was deleted.

2 changes: 0 additions & 2 deletions .unreleased/pr_10278

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10299

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10302

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_10315

This file was deleted.

2 changes: 0 additions & 2 deletions .unreleased/pr_10324

This file was deleted.

2 changes: 0 additions & 2 deletions .unreleased/pr_9315

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_9684

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/pr_9957

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/row-by-row

This file was deleted.

66 changes: 66 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,72 @@

**Please note: When updating your database, you should connect using `psql` with the `-X` flag to prevent any `.psqlrc` commands from accidentally triggering the load of a previous TimescaleDB version.**

## 2.29.0 (2026-07-28)

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** drastically improves the performance of `UPDATE` and `DELETE` statements on hypertables. By acquiring exclusive locks only on the specific chunks being modified rather than the entire hypertable, this enhancement eliminates massive lock contention and keeps high-concurrency workloads running smoothly without unnecessary slowdowns.
* Intelligent **row-by-row decompression** enables the query planner to decompress data row-by-row rather than in large batches when an operation prioritizes a fast initial response (such as queries with `LIMIT` clauses). This dramatically reduces memory overhead and query latency, ensuring lightning-fast performance when you only need to retrieve a small subset of records from your compressed hypertables.

**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](https://github.com/timescale/timescaledb/pull/10041) Remove support for PostgreSQL 15

**Features**
* [#9315](https://github.com/timescale/timescaledb/pull/9315) Speed up `DML` operations on hypertables by using the optimized TimescaleDB hypertable expansion code instead of the generic PostgreSQL inheritance hierarchy expansion
* [#9534](https://github.com/timescale/timescaledb/pull/9534) Speed up expression evaluation in the columnar pipeline by caching common subexpressions
* [#9684](https://github.com/timescale/timescaledb/pull/9684) Add `_timescaledb_functions.decompress_batch()` SQL function
* [#9732](https://github.com/timescale/timescaledb/pull/9732) Speed up some queries with small `LIMIT` by switching to row-by-row query execution pipeline
* [#9917](https://github.com/timescale/timescaledb/pull/9917) Decompress less data in `DML` on compressed hypertables by accounting for prepared statement parameters
* [#9957](https://github.com/timescale/timescaledb/pull/9957) Add `compact_chunk()` function
* [#10048](https://github.com/timescale/timescaledb/pull/10048) Support concurrent refresh policies on hierarchical continuous aggregates
* [#10081](https://github.com/timescale/timescaledb/pull/10081) Add `samplerate` argument to `_timescaledb_functions.estimate_uncompressed_size()`
* [#10100](https://github.com/timescale/timescaledb/pull/10100) Skip classifying compressed relations to speed up planning
* [#10118](https://github.com/timescale/timescaledb/pull/10118) Don't track compressed relations as separate chunk
* [#10119](https://github.com/timescale/timescaledb/pull/10119) Reduce memory usage of `INSERT` queries using direct compress and spanning multiple chunks
* [#10163](https://github.com/timescale/timescaledb/pull/10163) Add a compaction policy for unordered chunks
* [#10204](https://github.com/timescale/timescaledb/pull/10204) Don't create separate hypertable catalog entry for hypertables with compression
* [#10217](https://github.com/timescale/timescaledb/pull/10217) Initial placeholder version of granular refresh API
* [#10225](https://github.com/timescale/timescaledb/pull/10225) Add `config_merge` parameter to `alter_job()` for merging `jsonb` into the existing job configuration
* [#10226](https://github.com/timescale/timescaledb/pull/10226) Add `recompress_unordered` columnstore policy option
* [#10231](https://github.com/timescale/timescaledb/pull/10231) Use `regclass` for storing relation reference in chunk table
* [#10237](https://github.com/timescale/timescaledb/pull/10237) Add helper functions for decoding hypertable status
* [#10240](https://github.com/timescale/timescaledb/pull/10240) Add the `tsdb.direct_compress` storage parameter that allows enabling direct compress for a given hypertable independent of global settings
* [#10266](https://github.com/timescale/timescaledb/pull/10266) Add `max_batches` to `compact_chunk()`
* [#10299](https://github.com/timescale/timescaledb/pull/10299) Add `continuous_aggs_tenant_tracking` and `hypertable_cagg_settings` catalogs

**Bugfixes**
* [#10013](https://github.com/timescale/timescaledb/pull/10013) Make ownership error messages on continuous aggregates consistent
* [#10052](https://github.com/timescale/timescaledb/pull/10052) Result of `MIN` / `MAX` aggregate functions in columnar aggregation pipeline possibly inconsistent with plain PostgreSQL result
* [#10071](https://github.com/timescale/timescaledb/pull/10071) Prune the real-time branch of hierarchical continuous aggregates at any nesting depth
* [#10143](https://github.com/timescale/timescaledb/pull/10143) Fix division by zero when planning `time_bucket` with zero width
* [#10199](https://github.com/timescale/timescaledb/pull/10199) Fix `initial_start` handling in `build_job_info`
* [#10213](https://github.com/timescale/timescaledb/pull/10213) Cache sort pathkeys per hypertable
* [#10221](https://github.com/timescale/timescaledb/pull/10221) Fix incremental refresh skipping the last bucket
* [#10278](https://github.com/timescale/timescaledb/pull/10278) Drop `job_errors` view in `bgw_job_stat_history` migration
* [#10280](https://github.com/timescale/timescaledb/pull/10280) `RETURNING` clause returned no rows for `INSERT` using direct compress
* [#10281](https://github.com/timescale/timescaledb/pull/10281) Disable direct compress when the destination table has an exclusion constraint so the constraint is still enforced
* [#10282](https://github.com/timescale/timescaledb/pull/10282) Only count directly compressed rows toward the command tag when the `INSERT` sets it
* [#10286](https://github.com/timescale/timescaledb/pull/10286) Propagate `VACUUM` on a chunk to the compressed relation when running on the chunk directly
* [#10302](https://github.com/timescale/timescaledb/pull/10302) Fix useless-join removal and self-join elimination for hypertables
* [#10313](https://github.com/timescale/timescaledb/pull/10313) Allow running `ALTER EXTENSION timescaledb UPDATE` inside a transaction block
* [#10315](https://github.com/timescale/timescaledb/pull/10315) Fix overlap detection with running max
* [#10324](https://github.com/timescale/timescaledb/pull/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 for `UPDATE` and `DELETE` instead of the generic PostgreSQL inheritance hierarchy expansion. On by default.

**Thanks**
* @FrancescEthon and @ManuelEthon for reporting the issue
* @h0rn3t for reporting a problem with `VACUUM` not propagating to the compressed relation
* @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

## 2.28.3 (2026-07-16)

This release contains performance improvements and bug fixes since the 2.28.2 release. We recommend that you upgrade at the next available opportunity.
Expand Down
Loading