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/bloom-int2

This file was deleted.

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

This file was deleted.

1 change: 0 additions & 1 deletion .unreleased/in-any-chunk-exclusion

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

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

This file was deleted.

2 changes: 0 additions & 2 deletions .unreleased/saop-pushdown

This file was deleted.

83 changes: 83 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,89 @@ This page lists all the latest features and updates to TimescaleDB. When
you use psql to update your database, use the -X flag and prevent any .psqlrc
commands from accidentally triggering the load of a previous DB version.**

## 2.27.0 (2026-05-12)

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

**Highlighted features in TimescaleDB v2.27.0**
* The Hypercore engine now supports a vectorized implementation of filters by evaluating them inline through the standard Postgres function path. This expands the set of queries (including continuous aggregate refreshes) that can take the faster path through the columnstore, yielding speedups ranging from 30% up to 2x in benchmarks.
Comment thread
surister marked this conversation as resolved.
* `UPDATE` and `DELETE` statements with equality predicates can now use bloom filters to skip decompressing batches whose compressed rows can't match. When multiple bloom filters apply, they are evaluated in decreasing order of column count (most selective first), and EXPLAIN now reports filtering activity via the new "Compressed batches filtered" and "Batches filtered after decompression counters". The query performance increases in some case up to 160 times.
* `UPSERT` queries can now leverage bloom filters (including composite ones) to skip decompressing batches when the arbiter values are guaranteed not to be present, with the most-selective filter chosen automatically when multiple apply. EXPLAIN output adds new statistics — batches checked by bloom, batches pruned by bloom, batches without bloom, and bloom false positives — for visibility into pruning effectiveness.

**Upcoming PostgreSQL 15 EOL announcement**
As a reminder, the upcoming TimescaleDB release in June 2026 will officially be the last version with support for PostgreSQL 15. This deprecation was initially announced in the [v2.23.0 changelog](https://github.com/timescale/timescaledb/releases/tag/2.23.0) on October 29, 2025, to provide users ample time to prepare. To ensure uninterrupted access to new features, bugfixes and performance enhancements, all instances must be upgraded to PostgreSQL 16 or greater.

**Backward-Incompatible Changes**
* [#9579](https://github.com/timescale/timescaledb/pull/9579) The bloom filter sparse indexes on compressed `int2` columns could lead to `SELECT` queries not returning the rows that actually match the `WHERE` condition. The upgrade is blocked for the affected databases, and the incorrect indexes have to be dropped manually before the upgrade.
* This release introduces a new naming convention for composite bloom filter metadata. While this change will not disrupt query processing, v2.27 cannot automatically utilize composite bloom filters generated in v2.26. To convert your existing v2.26 composite bloom filters, the legacy metadata columns must be renamed. This is a lightweight, catalog-only operation requiring zero data recompression, which can be done with [this migration script](https://github.com/timescale/timescaledb-extras/blob/main/utils/2.27.x-fix-composite-bloom-columns.sql).

**Features**
* [#8868](https://github.com/timescale/timescaledb/pull/8868) Use `PG_MODULE_MAGIC_EXT` for `PG18`
* [#8967](https://github.com/timescale/timescaledb/pull/8967) Rewriting queries with continuous aggregates exactly matching query aggregation
* [#9192](https://github.com/timescale/timescaledb/pull/9192) Push down scalar array operations into the columnar metadata scan by transforming them into an `OR`/`AND` clause.
* [#9355](https://github.com/timescale/timescaledb/pull/9355) Defer `segmentby` default for direct compress
* [#9374](https://github.com/timescale/timescaledb/pull/9374) Use bloom filters to eliminate decompression of unrelated compressed batches during `UPSERT`s.
* [#9396](https://github.com/timescale/timescaledb/pull/9396) Analyze and get `segmentby` during direct compress
* [#9398](https://github.com/timescale/timescaledb/pull/9398) Fix chunk exclusion for `IN`/`ANY` on open (time) dimensions
* [#9399](https://github.com/timescale/timescaledb/pull/9399) Use bloom filters to reduce decompression during `UPDATE`/`DELETE` commands.
* [#9403](https://github.com/timescale/timescaledb/pull/9403) Set default `segmentby` during direct compress flush
* [#9437](https://github.com/timescale/timescaledb/pull/9437) Allow running compression as part of refresh policy for compressed continuous aggregates
* [#9443](https://github.com/timescale/timescaledb/pull/9443) Enable vectorized aggregation in some cases when the `WHERE` clause contains filters not handled through the "Vectorized Filters" facility. This includes e.g. filters on `time_bucket()`.
* [#9458](https://github.com/timescale/timescaledb/pull/9458) Remove `_timescaledb_functions.repair_relation_acls`
* [#9475](https://github.com/timescale/timescaledb/pull/9475) Calculate hashes for bloom filter predicates at planning time.
* [#9504](https://github.com/timescale/timescaledb/pull/9504) Allow `ALTER TABLE RESET` on materialization hypertables
* [#9521](https://github.com/timescale/timescaledb/pull/9521) Add support for reporting index creation progress
* [#9559](https://github.com/timescale/timescaledb/pull/9559) Notice on compression settings change
* [#9569](https://github.com/timescale/timescaledb/pull/9569) For nullable `orderby` columns do segmentwise decompress-compress instead of segmentwise recompress.
* [#9583](https://github.com/timescale/timescaledb/pull/9583) Drop existing sparse indexes when dropping columns
* [#9648](https://github.com/timescale/timescaledb/pull/9648) Support `ENABLE`/`DISABLE TRIGGER` on hypertables
* [#9702](https://github.com/timescale/timescaledb/pull/9702) Allow Batch Sorted Merge for unordered chunks with no `segmentby` or when all `segmentby` columns are pinned to a `Const`

**Bugfixes**
* [#9363](https://github.com/timescale/timescaledb/pull/9363) Change compression job status when chunks could be compressed
* [#9413](https://github.com/timescale/timescaledb/pull/9413) Fix incorrect decompress markers on full batch delete
* [#9414](https://github.com/timescale/timescaledb/pull/9414) Fix `NULL` compression handling in `estimate_uncompressed_size`
* [#9417](https://github.com/timescale/timescaledb/pull/9417) Fix segfault in `bloom1_contains`
* [#9479](https://github.com/timescale/timescaledb/pull/9479) Disallow sub-day offset for `time-bucket` on `Date`
* [#9482](https://github.com/timescale/timescaledb/pull/9482) Forbid Batch Sort Merge on nullable `orderby` columns
* [#9490](https://github.com/timescale/timescaledb/pull/9490) Disallow negative interval as `chunk_interval`
* [#9500](https://github.com/timescale/timescaledb/pull/9500) Fix off-by-one error when building object name
* [#9519](https://github.com/timescale/timescaledb/pull/9519) Remove self-referential `FOREIGN KEY` constraints from catalog
* [#9561](https://github.com/timescale/timescaledb/pull/9561) Simplify job history retention by replacing binary search and temp table
* [#9590](https://github.com/timescale/timescaledb/pull/9590) Fix policy skipping uncompressed chunks
* [#9596](https://github.com/timescale/timescaledb/pull/9596) Remove unused `process_hypertable_invalidations` policy code
* [#9604](https://github.com/timescale/timescaledb/pull/9604) Remove dead `post_parse_analyze_hook` capture in loader
* [#9610](https://github.com/timescale/timescaledb/pull/9610) Fix use-after-free crash in `cache_destroy` during transaction abort
* [#9632](https://github.com/timescale/timescaledb/pull/9632) Preserve chunk settings during recompress
* [#9640](https://github.com/timescale/timescaledb/pull/9640) Fix `NULL` `datumCopy` crash in `segmentby` analysis
* [#9680](https://github.com/timescale/timescaledb/pull/9680) Fix segfault in direct compress insert on hypertable with dropped column
* [#9692](https://github.com/timescale/timescaledb/pull/9692) Fix internal "invalid perminfoindex 0 in RTE" error on `MERGE NOT MATCHED INSERT` into a hypertable
* [#9705](https://github.com/timescale/timescaledb/pull/9705) Avoid double `TOAST` delete when `DELETE-after-compression` is enabled
* [#9705](https://github.com/timescale/timescaledb/pull/9705) Only freeze compressed rows when truncating uncompressed chunk
* [#9706](https://github.com/timescale/timescaledb/pull/9706) Use `bigint` in `estimate_uncompressed_size` calculations
* [#9709](https://github.com/timescale/timescaledb/pull/9709) Reject mismatched element type in `bool`/`uuid` decompression
* [#9710](https://github.com/timescale/timescaledb/pull/9710) Return `bigint` from `compressed_data_column_size`
* [#9711](https://github.com/timescale/timescaledb/pull/9711) Fix registration row leak when continuous aggregate refresh fails
* [#9697](https://github.com/timescale/timescaledb/pull/9697) Improve `pathkey` handling for compressed sub-paths during sort transformation
* [#9743](https://github.com/timescale/timescaledb/pull/9743) Fix the composite bloom metadata column naming scheme
* [#9767](https://github.com/timescale/timescaledb/pull/9767) Skip dropped chunks when trying to remove `ts_cagg_invalidation_trigger`
* [#9747](https://github.com/timescale/timescaledb/pull/9747) Reject inheriting from a hypertable
* [#9744](https://github.com/timescale/timescaledb/pull/9744) Use a fixed call string for the telemetry job in `ts_stat_statements` recording
* [#9736](https://github.com/timescale/timescaledb/pull/9736) Do logical sparse index comparison
* [#9731](https://github.com/timescale/timescaledb/pull/9731) Avoid creating overlapping batches during recompression for multi orderby configurations
* [#9717](https://github.com/timescale/timescaledb/pull/9717) Reject non-positive time bucket width on cagg creation
* [#9707](https://github.com/timescale/timescaledb/pull/9707) Fix policy name comparison in remove_policies

**New Settings**
* `enable_cagg_rewrites`: enables rewriting queries with CAggs. Off by default. `cagg_rewrites_debug_info`: prints CAgg rewrites diagnostics. Off by default.
* `enable_columnar_scan_filter_pushdown`: enables pushing the filters on columnar scan down to the compressed scan level. On by default.

**Thanks**
* @fabriziomello for adding support for `PG_MODULE_MAGIC_EXT`
* @maltalex for reporting an issue with index creation progress reporting
* @pavanmanishd for the first version of the fix for #9743
* @h0rn3t for reporting issue with recompression creating overlapping batches

## 2.26.4 (2026-04-28)

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