From 84d4bfe806f1de4c47ca2bdfc810bf9903ed5f63 Mon Sep 17 00:00:00 2001 From: timescale-automation <123763385+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 May 2026 06:38:55 +0000 Subject: [PATCH 01/10] CHANGELOG 2.27.0 --- .unreleased/bloom-int2 | 1 - .unreleased/filter-columnar | 1 - .unreleased/in-any-chunk-exclusion | 1 - .unreleased/pr_8868 | 2 - .unreleased/pr_8967 | 2 - .unreleased/pr_9355 | 1 - .unreleased/pr_9363 | 1 - .unreleased/pr_9374 | 1 - .unreleased/pr_9396 | 1 - .unreleased/pr_9399 | 1 - .unreleased/pr_9403 | 1 - .unreleased/pr_9413 | 1 - .unreleased/pr_9414 | 1 - .unreleased/pr_9417 | 1 - .unreleased/pr_9437 | 1 - .unreleased/pr_9458 | 1 - .unreleased/pr_9475 | 1 - .unreleased/pr_9479 | 1 - .unreleased/pr_9482 | 1 - .unreleased/pr_9490 | 1 - .unreleased/pr_9500 | 1 - .unreleased/pr_9504 | 1 - .unreleased/pr_9519 | 1 - .unreleased/pr_9521 | 2 - .unreleased/pr_9559 | 1 - .unreleased/pr_9561 | 1 - .unreleased/pr_9569 | 1 - .unreleased/pr_9583 | 1 - .unreleased/pr_9590 | 1 - .unreleased/pr_9596 | 1 - .unreleased/pr_9604 | 1 - .unreleased/pr_9610 | 1 - .unreleased/pr_9632 | 1 - .unreleased/pr_9640 | 1 - .unreleased/pr_9648 | 1 - .unreleased/pr_9680 | 1 - .unreleased/pr_9692 | 1 - .unreleased/pr_9702 | 1 - .unreleased/pr_9705 | 2 - .unreleased/pr_9706 | 1 - .unreleased/pr_9709 | 1 - .unreleased/pr_9710 | 1 - .unreleased/pr_9711 | 1 - .unreleased/saop-pushdown | 2 - CHANGELOG.md | 68 ++++++++++++++++++++++++++++++ 45 files changed, 68 insertions(+), 49 deletions(-) delete mode 100644 .unreleased/bloom-int2 delete mode 100644 .unreleased/filter-columnar delete mode 100644 .unreleased/in-any-chunk-exclusion delete mode 100644 .unreleased/pr_8868 delete mode 100644 .unreleased/pr_8967 delete mode 100644 .unreleased/pr_9355 delete mode 100644 .unreleased/pr_9363 delete mode 100644 .unreleased/pr_9374 delete mode 100644 .unreleased/pr_9396 delete mode 100644 .unreleased/pr_9399 delete mode 100644 .unreleased/pr_9403 delete mode 100644 .unreleased/pr_9413 delete mode 100644 .unreleased/pr_9414 delete mode 100644 .unreleased/pr_9417 delete mode 100644 .unreleased/pr_9437 delete mode 100644 .unreleased/pr_9458 delete mode 100644 .unreleased/pr_9475 delete mode 100644 .unreleased/pr_9479 delete mode 100644 .unreleased/pr_9482 delete mode 100644 .unreleased/pr_9490 delete mode 100644 .unreleased/pr_9500 delete mode 100644 .unreleased/pr_9504 delete mode 100644 .unreleased/pr_9519 delete mode 100644 .unreleased/pr_9521 delete mode 100644 .unreleased/pr_9559 delete mode 100644 .unreleased/pr_9561 delete mode 100644 .unreleased/pr_9569 delete mode 100644 .unreleased/pr_9583 delete mode 100644 .unreleased/pr_9590 delete mode 100644 .unreleased/pr_9596 delete mode 100644 .unreleased/pr_9604 delete mode 100644 .unreleased/pr_9610 delete mode 100644 .unreleased/pr_9632 delete mode 100644 .unreleased/pr_9640 delete mode 100644 .unreleased/pr_9648 delete mode 100644 .unreleased/pr_9680 delete mode 100644 .unreleased/pr_9692 delete mode 100644 .unreleased/pr_9702 delete mode 100644 .unreleased/pr_9705 delete mode 100644 .unreleased/pr_9706 delete mode 100644 .unreleased/pr_9709 delete mode 100644 .unreleased/pr_9710 delete mode 100644 .unreleased/pr_9711 delete mode 100644 .unreleased/saop-pushdown diff --git a/.unreleased/bloom-int2 b/.unreleased/bloom-int2 deleted file mode 100644 index 4fa840140d0..00000000000 --- a/.unreleased/bloom-int2 +++ /dev/null @@ -1 +0,0 @@ -Backward-Incompatible Change: #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. diff --git a/.unreleased/filter-columnar b/.unreleased/filter-columnar deleted file mode 100644 index 442094c9c2c..00000000000 --- a/.unreleased/filter-columnar +++ /dev/null @@ -1 +0,0 @@ -Implements: #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(). diff --git a/.unreleased/in-any-chunk-exclusion b/.unreleased/in-any-chunk-exclusion deleted file mode 100644 index 4f5e963e39c..00000000000 --- a/.unreleased/in-any-chunk-exclusion +++ /dev/null @@ -1 +0,0 @@ -Implements: #9398 Fix chunk exclusion for IN/ANY on open (time) dimensions diff --git a/.unreleased/pr_8868 b/.unreleased/pr_8868 deleted file mode 100644 index f9239e5eea6..00000000000 --- a/.unreleased/pr_8868 +++ /dev/null @@ -1,2 +0,0 @@ -Implements: #8868 Use PG_MODULE_MAGIC_EXT for PG18 -Thanks: @fabriziomello for adding support for PG_MODULE_MAGIC_EXT diff --git a/.unreleased/pr_8967 b/.unreleased/pr_8967 deleted file mode 100644 index 5e57b24cbe1..00000000000 --- a/.unreleased/pr_8967 +++ /dev/null @@ -1,2 +0,0 @@ -Implements: #8967 Rewriting queries with continuous aggregates exactly matching query aggregation -Setting: `enable_cagg_rewrites`: enables rewriting queries with CAggs. Off by default. `cagg_rewrites_debug_info`: prints CAgg rewrites diagnostics. Off by default. diff --git a/.unreleased/pr_9355 b/.unreleased/pr_9355 deleted file mode 100644 index 7671a2865d9..00000000000 --- a/.unreleased/pr_9355 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9355 Defer segmentby default for direct compress diff --git a/.unreleased/pr_9363 b/.unreleased/pr_9363 deleted file mode 100644 index 438d729e295..00000000000 --- a/.unreleased/pr_9363 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9363 Change compression job status when chunks could be compressed diff --git a/.unreleased/pr_9374 b/.unreleased/pr_9374 deleted file mode 100644 index 8f28c3c4295..00000000000 --- a/.unreleased/pr_9374 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9374 Use bloom filters to eliminate decompression of unrelated compressed batches during UPSERTs. diff --git a/.unreleased/pr_9396 b/.unreleased/pr_9396 deleted file mode 100644 index 116a1ee52be..00000000000 --- a/.unreleased/pr_9396 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9396 Analyze and get segmentby during direct compress diff --git a/.unreleased/pr_9399 b/.unreleased/pr_9399 deleted file mode 100644 index cd8a3c4efba..00000000000 --- a/.unreleased/pr_9399 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9399 Use bloom filters to reduce decompression during UPDATE/DELETE commands. diff --git a/.unreleased/pr_9403 b/.unreleased/pr_9403 deleted file mode 100644 index 0aabf191d00..00000000000 --- a/.unreleased/pr_9403 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9403 Set default segmentby during direct compress flush diff --git a/.unreleased/pr_9413 b/.unreleased/pr_9413 deleted file mode 100644 index 008eb639827..00000000000 --- a/.unreleased/pr_9413 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9413 Fix incorrect decompress markers on full batch delete diff --git a/.unreleased/pr_9414 b/.unreleased/pr_9414 deleted file mode 100644 index 4da1bd9ebb5..00000000000 --- a/.unreleased/pr_9414 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9414 Fix NULL compression handling in estimate_uncompressed_size diff --git a/.unreleased/pr_9417 b/.unreleased/pr_9417 deleted file mode 100644 index 062e18d571c..00000000000 --- a/.unreleased/pr_9417 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9417 Fix segfault in bloom1_contains diff --git a/.unreleased/pr_9437 b/.unreleased/pr_9437 deleted file mode 100644 index 2e2f2498d27..00000000000 --- a/.unreleased/pr_9437 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9437 Allow running compression as part of refresh policy for compressed continuous aggregates diff --git a/.unreleased/pr_9458 b/.unreleased/pr_9458 deleted file mode 100644 index 5956e474301..00000000000 --- a/.unreleased/pr_9458 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9458 Remove _timescaledb_functions.repair_relation_acls diff --git a/.unreleased/pr_9475 b/.unreleased/pr_9475 deleted file mode 100644 index 86bdb7670fb..00000000000 --- a/.unreleased/pr_9475 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9475 Calculate hashes for bloom filter predicates at planning time. diff --git a/.unreleased/pr_9479 b/.unreleased/pr_9479 deleted file mode 100644 index ad8792cf56d..00000000000 --- a/.unreleased/pr_9479 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9479 Disallow sub-day offset for time-bucket on Date diff --git a/.unreleased/pr_9482 b/.unreleased/pr_9482 deleted file mode 100644 index dfacf4cdcce..00000000000 --- a/.unreleased/pr_9482 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9482 Forbid Batch Sort Merge on nullable orderby columns diff --git a/.unreleased/pr_9490 b/.unreleased/pr_9490 deleted file mode 100644 index da6bf678773..00000000000 --- a/.unreleased/pr_9490 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9490 Disallow negative interval as chunk_interval diff --git a/.unreleased/pr_9500 b/.unreleased/pr_9500 deleted file mode 100644 index 7dde5b35ab4..00000000000 --- a/.unreleased/pr_9500 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9500 Fix off-by-one error when building object name diff --git a/.unreleased/pr_9504 b/.unreleased/pr_9504 deleted file mode 100644 index a577ff1df5b..00000000000 --- a/.unreleased/pr_9504 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9504 Allow ALTER TABLE RESET on materialization hypertables diff --git a/.unreleased/pr_9519 b/.unreleased/pr_9519 deleted file mode 100644 index ece49e0a051..00000000000 --- a/.unreleased/pr_9519 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9519 Remove self-referential FOREIGN KEY constraints from catalog diff --git a/.unreleased/pr_9521 b/.unreleased/pr_9521 deleted file mode 100644 index 723594dae33..00000000000 --- a/.unreleased/pr_9521 +++ /dev/null @@ -1,2 +0,0 @@ -Implements: #9521 Add support for reporting index creation progress -Thanks: @maltalex for reporting an issue with index creation progress reporting diff --git a/.unreleased/pr_9559 b/.unreleased/pr_9559 deleted file mode 100644 index 77dc5419135..00000000000 --- a/.unreleased/pr_9559 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9559 Notice on compression settings change diff --git a/.unreleased/pr_9561 b/.unreleased/pr_9561 deleted file mode 100644 index 4d3493dbcaa..00000000000 --- a/.unreleased/pr_9561 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9561 Simplify job history retention by replacing binary search and temp table diff --git a/.unreleased/pr_9569 b/.unreleased/pr_9569 deleted file mode 100644 index 74f9941d82c..00000000000 --- a/.unreleased/pr_9569 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9569 For nullable orderby columns do segmentwise decompress-compress instead of segmentwise recompress. diff --git a/.unreleased/pr_9583 b/.unreleased/pr_9583 deleted file mode 100644 index 571b8a53c67..00000000000 --- a/.unreleased/pr_9583 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9583 Drop existing sparse indexes when dropping columns diff --git a/.unreleased/pr_9590 b/.unreleased/pr_9590 deleted file mode 100644 index 26a00cd823a..00000000000 --- a/.unreleased/pr_9590 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9590 Fix policy skipping uncompressed chunks diff --git a/.unreleased/pr_9596 b/.unreleased/pr_9596 deleted file mode 100644 index 86f6a58542d..00000000000 --- a/.unreleased/pr_9596 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9596 Remove unused process_hypertable_invalidations policy code diff --git a/.unreleased/pr_9604 b/.unreleased/pr_9604 deleted file mode 100644 index 3a2abef62b0..00000000000 --- a/.unreleased/pr_9604 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9604 Remove dead post_parse_analyze_hook capture in loader diff --git a/.unreleased/pr_9610 b/.unreleased/pr_9610 deleted file mode 100644 index bc0d91ba2e9..00000000000 --- a/.unreleased/pr_9610 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9610 Fix use-after-free crash in cache_destroy during transaction abort diff --git a/.unreleased/pr_9632 b/.unreleased/pr_9632 deleted file mode 100644 index a09f34560ec..00000000000 --- a/.unreleased/pr_9632 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9632 Preserve chunk settings during recompress diff --git a/.unreleased/pr_9640 b/.unreleased/pr_9640 deleted file mode 100644 index e08723db583..00000000000 --- a/.unreleased/pr_9640 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9640 Fix NULL datumCopy crash in segmentby analysis diff --git a/.unreleased/pr_9648 b/.unreleased/pr_9648 deleted file mode 100644 index 04618057e8c..00000000000 --- a/.unreleased/pr_9648 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9648 Support ENABLE/DISABLE TRIGGER on hypertables diff --git a/.unreleased/pr_9680 b/.unreleased/pr_9680 deleted file mode 100644 index 3419ac3bcda..00000000000 --- a/.unreleased/pr_9680 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9680 Fix segfault in direct compress insert on hypertable with dropped column diff --git a/.unreleased/pr_9692 b/.unreleased/pr_9692 deleted file mode 100644 index fd55dadebda..00000000000 --- a/.unreleased/pr_9692 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9692 Fix internal "invalid perminfoindex 0 in RTE" error on MERGE NOT MATCHED INSERT into a hypertable diff --git a/.unreleased/pr_9702 b/.unreleased/pr_9702 deleted file mode 100644 index 64f32071346..00000000000 --- a/.unreleased/pr_9702 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9702 Allow Batch Sorted Merge for unordered chunks with no segmentby or when all segmentby columns are pinned to a Const diff --git a/.unreleased/pr_9705 b/.unreleased/pr_9705 deleted file mode 100644 index 263b1e3f06d..00000000000 --- a/.unreleased/pr_9705 +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: #9705 Only freeze compressed rows when truncating uncompressed chunk -Fixes: #9705 Avoid double TOAST delete when DELETE-after-compression is enabled diff --git a/.unreleased/pr_9706 b/.unreleased/pr_9706 deleted file mode 100644 index 7e955f02c32..00000000000 --- a/.unreleased/pr_9706 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9706 Use bigint in estimate_uncompressed_size calculations diff --git a/.unreleased/pr_9709 b/.unreleased/pr_9709 deleted file mode 100644 index 53f06255a2f..00000000000 --- a/.unreleased/pr_9709 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9709 Reject mismatched element type in bool/uuid decompression diff --git a/.unreleased/pr_9710 b/.unreleased/pr_9710 deleted file mode 100644 index d03ae1db6c8..00000000000 --- a/.unreleased/pr_9710 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9710 Return bigint from compressed_data_column_size diff --git a/.unreleased/pr_9711 b/.unreleased/pr_9711 deleted file mode 100644 index d6d02b90638..00000000000 --- a/.unreleased/pr_9711 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9711 Fix registration row leak when continuous aggregate refresh fails diff --git a/.unreleased/saop-pushdown b/.unreleased/saop-pushdown deleted file mode 100644 index f382439ab02..00000000000 --- a/.unreleased/saop-pushdown +++ /dev/null @@ -1,2 +0,0 @@ -Implements: #9192 Push down scalar array operations into the columnar metadata scan by transforming them into an OR/AND clause. -Setting: `enable_columnar_scan_filter_pushdown`: enables pushing the filters on columnar scan down to the compressed scan level. On by default. diff --git a/CHANGELOG.md b/CHANGELOG.md index 0323a490a8b..5b7a0ab755f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,74 @@ 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-05) + +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** +* + +**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. + +**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 UPSERTs. +* [#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 + +**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. + +**GUCs** + +**Thanks** +* @fabriziomello for adding support for PG_MODULE_MAGIC_EXT +* @maltalex for reporting an issue with index creation progress reporting + ## 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. From 022046778e6e3dbc2d41203119eb53e95af579d0 Mon Sep 17 00:00:00 2001 From: Ivan Sanchez Date: Tue, 5 May 2026 08:59:31 +0200 Subject: [PATCH 02/10] add some code format --- CHANGELOG.md | 66 +++++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 34 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b7a0ab755f..95a48f81926 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,67 +10,65 @@ commands from accidentally triggering the load of a previous DB version.** 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** -* +* **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. +* [#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. **Features** -* [#8868](https://github.com/timescale/timescaledb/pull/8868) Use PG_MODULE_MAGIC_EXT for PG18 +* [#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 UPSERTs. -* [#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 +* [#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 +* [#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 +* [#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. +* [#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 +* [#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 +* [#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 +* [#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 +* [#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 +* [#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 +* [#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 +* [#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 **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. -**GUCs** - **Thanks** -* @fabriziomello for adding support for PG_MODULE_MAGIC_EXT +* @fabriziomello for adding support for `PG_MODULE_MAGIC_EXT` * @maltalex for reporting an issue with index creation progress reporting ## 2.26.4 (2026-04-28) From f9ed37fc7b5b2be83d3c450cf22c9bc9c3e4ef1a Mon Sep 17 00:00:00 2001 From: philkra Date: Tue, 5 May 2026 14:20:27 +0200 Subject: [PATCH 03/10] added highlights --- CHANGELOG.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95a48f81926..ce8bcb7f7dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,15 +5,14 @@ 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-05) +## 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** -* - -**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. +* 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. +* `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. **Features** * [#8868](https://github.com/timescale/timescaledb/pull/8868) Use `PG_MODULE_MAGIC_EXT` for `PG18` @@ -63,6 +62,9 @@ This release contains performance improvements and bug fixes since the 2.26.4 re * [#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 +**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. + **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. From 3477a8c877c898113b1d213085714b2f0ca523f0 Mon Sep 17 00:00:00 2001 From: Ivan Sanchez Date: Wed, 6 May 2026 11:19:10 +0200 Subject: [PATCH 04/10] add 9697 --- .unreleased/pr_9697 | 1 - CHANGELOG.md | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 .unreleased/pr_9697 diff --git a/.unreleased/pr_9697 b/.unreleased/pr_9697 deleted file mode 100644 index 64324891516..00000000000 --- a/.unreleased/pr_9697 +++ /dev/null @@ -1 +0,0 @@ -Implements: #9697 Improve pathkey handling for compressed sub-paths during sort transformation diff --git a/CHANGELOG.md b/CHANGELOG.md index ce8bcb7f7dd..bd7bffa7c04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -61,6 +61,7 @@ This release contains performance improvements and bug fixes since the 2.26.4 re * [#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 **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. From b17e8365225bc6b39d7842fa5504d394d488b5a8 Mon Sep 17 00:00:00 2001 From: philkra Date: Tue, 5 May 2026 16:05:30 +0200 Subject: [PATCH 05/10] Move backwards incomp changes section back up --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd7bffa7c04..4750de1c38d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ This release contains performance improvements and bug fixes since the 2.26.4 re * `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. +**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. + **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 @@ -63,9 +66,6 @@ This release contains performance improvements and bug fixes since the 2.26.4 re * [#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 -**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. - **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. From 0ecac37bbb2263669a901f4e0e72cda5fc6dd525 Mon Sep 17 00:00:00 2001 From: philkra Date: Thu, 7 May 2026 09:47:38 +0200 Subject: [PATCH 06/10] Add sunsetting announcement --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4750de1c38d..62108fbaf26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,9 @@ This release contains performance improvements and bug fixes since the 2.26.4 re * `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 end 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 and performance enhancements, all instances should be upgraded to PostgreSQL 16 or newer prior to the June release. + **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. From 569ee77392b90b610e54086d8a11267616734700 Mon Sep 17 00:00:00 2001 From: philkra Date: Thu, 7 May 2026 09:51:24 +0200 Subject: [PATCH 07/10] reformulate sunsetting --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62108fbaf26..b5f57373f2b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ This release contains performance improvements and bug fixes since the 2.26.4 re * `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 end 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 and performance enhancements, all instances should be upgraded to PostgreSQL 16 or newer prior to the June release. +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. From 0898d35c557c4308324c451719adee1094d94241 Mon Sep 17 00:00:00 2001 From: Ivan Sanchez Date: Mon, 11 May 2026 16:21:19 +0200 Subject: [PATCH 08/10] add 9697 --- .unreleased/pr_9743 | 2 -- CHANGELOG.md | 5 ++++- 2 files changed, 4 insertions(+), 3 deletions(-) delete mode 100644 .unreleased/pr_9743 diff --git a/.unreleased/pr_9743 b/.unreleased/pr_9743 deleted file mode 100644 index 36f538a7173..00000000000 --- a/.unreleased/pr_9743 +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: #9743 Fixes the composite bloom metadata column naming scheme -Thanks: @pavanmanishd for the first version of the fix diff --git a/CHANGELOG.md b/CHANGELOG.md index b5f57373f2b..1eda9bacae8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,7 +14,7 @@ This release contains performance improvements and bug fixes since the 2.26.4 re * `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** +**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** @@ -68,6 +68,8 @@ As a reminder, the upcoming TimescaleDB release in June 2026 will officially be * [#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 + **New Settings** * `enable_cagg_rewrites`: enables rewriting queries with CAggs. Off by default. `cagg_rewrites_debug_info`: prints CAgg rewrites diagnostics. Off by default. @@ -76,6 +78,7 @@ As a reminder, the upcoming TimescaleDB release in June 2026 will officially be **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 ## 2.26.4 (2026-04-28) From daa5cfcaa3c00c2dee646f2a7683ca9bc63cecf0 Mon Sep 17 00:00:00 2001 From: philkra Date: Mon, 11 May 2026 18:02:56 +0200 Subject: [PATCH 09/10] Composite bloom filter changes --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1eda9bacae8..8586f633fd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ As a reminder, the upcoming TimescaleDB release in June 2026 will officially be **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` From 8b21ec164d887fc8fed087dcfae8a92ccefd4b64 Mon Sep 17 00:00:00 2001 From: Ivan Sanchez Date: Tue, 12 May 2026 09:35:44 +0200 Subject: [PATCH 10/10] add 9767, 9747, 9744, 9736, 9731, 9717, 9707 --- .unreleased/pr_9707 | 1 - .unreleased/pr_9717 | 1 - .unreleased/pr_9733 | 2 -- .unreleased/pr_9736 | 1 - .unreleased/pr_9744 | 1 - .unreleased/pr_9747 | 1 - .unreleased/pr_9767 | 1 - CHANGELOG.md | 9 ++++++++- 8 files changed, 8 insertions(+), 9 deletions(-) delete mode 100644 .unreleased/pr_9707 delete mode 100644 .unreleased/pr_9717 delete mode 100644 .unreleased/pr_9733 delete mode 100644 .unreleased/pr_9736 delete mode 100644 .unreleased/pr_9744 delete mode 100644 .unreleased/pr_9747 delete mode 100644 .unreleased/pr_9767 diff --git a/.unreleased/pr_9707 b/.unreleased/pr_9707 deleted file mode 100644 index 67c118a55d3..00000000000 --- a/.unreleased/pr_9707 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9707 Fix policy name comparison in remove_policies diff --git a/.unreleased/pr_9717 b/.unreleased/pr_9717 deleted file mode 100644 index 95484349fd2..00000000000 --- a/.unreleased/pr_9717 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9717 Reject non-positive time bucket width on cagg creation diff --git a/.unreleased/pr_9733 b/.unreleased/pr_9733 deleted file mode 100644 index 4c6e3cfd9e2..00000000000 --- a/.unreleased/pr_9733 +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: #9731 Avoid creating overlapping batches during recompression for multi orderby configurations -Thanks: @h0rn3t for reporting issue with recompression creating overlapping batches diff --git a/.unreleased/pr_9736 b/.unreleased/pr_9736 deleted file mode 100644 index 0d800edcb90..00000000000 --- a/.unreleased/pr_9736 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9736 Do logical sparse index comparison diff --git a/.unreleased/pr_9744 b/.unreleased/pr_9744 deleted file mode 100644 index efd3ea97fd6..00000000000 --- a/.unreleased/pr_9744 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9744 Use a fixed call string for the telemetry job in ts_stat_statements recording diff --git a/.unreleased/pr_9747 b/.unreleased/pr_9747 deleted file mode 100644 index e8a58d7193b..00000000000 --- a/.unreleased/pr_9747 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9747 Reject inheriting from a hypertable diff --git a/.unreleased/pr_9767 b/.unreleased/pr_9767 deleted file mode 100644 index 0afd9c33850..00000000000 --- a/.unreleased/pr_9767 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #9767 Skip dropped chunks when trying to remove ts_cagg_invalidation_trigger diff --git a/CHANGELOG.md b/CHANGELOG.md index 8586f633fd3..caae5415a4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -70,7 +70,13 @@ As a reminder, the upcoming TimescaleDB release in June 2026 will officially be * [#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. @@ -80,6 +86,7 @@ As a reminder, the upcoming TimescaleDB release in June 2026 will officially be * @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)