This release includes 1 breaking change for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+5 more
Affected surfaces
ReleasePort's take
Moderate signalTimescaleDB 2.27.0 blocks upgrades: bloom filter sparse indexes on compressed int2 columns must be dropped manually, as they may miss matching rows. Upgrade to access query optimizations including vectorized filters and bloom filter acceleration for UPDATE/DELETE/UPSERT.
Why it matters: Bloom filter sparse indexes on compressed int2 columns may miss matching rows. All deployments must drop these indexes manually before upgrading to 2.27.0.
Summary
AI summaryUpgrade is blocked if bloom filter sparse indexes on compressed int2 columns exist; they must be dropped manually before upgrading to TimescaleDB 2.27.0.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | Medium |
Bloom filter sparse indexes on compressed int2 columns may miss matching rows; upgrade requires manual index dropping Bloom filter sparse indexes on compressed int2 columns may miss matching rows; upgrade requires manual index dropping Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Hypercore engine supports vectorized filters inline through standard Postgres function path Hypercore engine supports vectorized filters inline through standard Postgres function path Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
UPDATE and DELETE with equality predicates use bloom filters to skip decompressing unmatched batches UPDATE and DELETE with equality predicates use bloom filters to skip decompressing unmatched batches Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
UPSERT queries leverage bloom filters to skip decompressing unrelated compressed batches UPSERT queries leverage bloom filters to skip decompressing unrelated compressed batches Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Continuous aggregates exactly matching query aggregation are rewritten Continuous aggregates exactly matching query aggregation are rewritten Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Scalar array operations pushed into columnar metadata scan as OR/AND clauses Scalar array operations pushed into columnar metadata scan as OR/AND clauses Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Default segmentby deferred for direct compress Default segmentby deferred for direct compress Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Analyze and get segmentby during direct compress flush Analyze and get segmentby during direct compress flush Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Chunk exclusion fixed for IN/ANY on open (time) dimensions Chunk exclusion fixed for IN/ANY on open (time) dimensions Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Bloom filters used to reduce decompression during UPDATE/DELETE commands Bloom filters used to reduce decompression during UPDATE/DELETE commands Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Allow running compression as part of refresh policy for compressed continuous aggregates Allow running compression as part of refresh policy for compressed continuous aggregates Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Vectorized aggregation enabled when WHERE clause contains filters not handled through Vectorized Filters facility Vectorized aggregation enabled when WHERE clause contains filters not handled through Vectorized Filters facility Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Calculate hashes for bloom filter predicates at planning time Calculate hashes for bloom filter predicates at planning time Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Allow ALTER TABLE RESET on materialization hypertables Allow ALTER TABLE RESET on materialization hypertables Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
For nullable orderby columns, perform segmentwise decompress-compress instead of recompress For nullable orderby columns, perform segmentwise decompress-compress instead of recompress Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Drop existing sparse indexes when dropping columns Drop existing sparse indexes when dropping columns Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Support ENABLE/DISABLE TRIGGER on hypertables Support ENABLE/DISABLE TRIGGER on hypertables Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Remove _timescaledb_functions.repair_relation_acls Remove _timescaledb_functions.repair_relation_acls Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Add support for reporting index creation progress Add support for reporting index creation progress Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Notice on compression settings change Notice on compression settings change Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Allow Batch Sorted Merge for unordered chunks with no segmentby or pinned Const segmentby columns Allow Batch Sorted Merge for unordered chunks with no segmentby or pinned Const segmentby columns Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Deprecation | Medium |
Last TimescaleDB release supporting PostgreSQL 15 will be in June 2026 Last TimescaleDB release supporting PostgreSQL 15 will be in June 2026 Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Incorrect decompress markers fixed on full batch delete Incorrect decompress markers fixed on full batch delete Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
NULL compression handling corrected in estimate_uncompressed_size NULL compression handling corrected in estimate_uncompressed_size Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Batch Sort Merge forbidden on nullable orderby columns Batch Sort Merge forbidden on nullable orderby columns Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Negative interval rejected as chunk_interval Negative interval rejected as chunk_interval Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Compression job status updated when chunks could be compressed Compression job status updated when chunks could be compressed Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Segfault in bloom1_contains resolved Segfault in bloom1_contains resolved Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Sub-day offset disallowed for time-bucket on Date Sub-day offset disallowed for time-bucket on Date Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Off-by-one error in object name building fixed Off-by-one error in object name building fixed Source: llm_adapter@2026-05-21 Confidence: low |
— |
Full changelog
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.
UPDATEandDELETEstatements 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.UPSERTqueries 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 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 The bloom filter sparse indexes on compressed
int2columns could lead toSELECTqueries not returning the rows that actually match theWHEREcondition. 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.
Features
- #8868 Use
PG_MODULE_MAGIC_EXTforPG18 - #8967 Rewriting queries with continuous aggregates exactly matching query aggregation
- #9192 Push down scalar array operations into the columnar metadata scan by transforming them into an
OR/ANDclause. - #9355 Defer
segmentbydefault for direct compress - #9374 Use bloom filters to eliminate decompression of unrelated compressed batches during
UPSERTs. - #9396 Analyze and get
segmentbyduring direct compress - #9398 Fix chunk exclusion for
IN/ANYon open (time) dimensions - #9399 Use bloom filters to reduce decompression during
UPDATE/DELETEcommands. - #9403 Set default
segmentbyduring direct compress flush - #9437 Allow running compression as part of refresh policy for compressed continuous aggregates
- #9443 Enable vectorized aggregation in some cases when the
WHEREclause contains filters not handled through the "Vectorized Filters" facility. This includes e.g. filters ontime_bucket(). - #9458 Remove
_timescaledb_functions.repair_relation_acls - #9475 Calculate hashes for bloom filter predicates at planning time.
- #9504 Allow
ALTER TABLE RESETon materialization hypertables - #9521 Add support for reporting index creation progress
- #9559 Notice on compression settings change
- #9569 For nullable
orderbycolumns do segmentwise decompress-compress instead of segmentwise recompress. - #9583 Drop existing sparse indexes when dropping columns
- #9648 Support
ENABLE/DISABLE TRIGGERon hypertables - #9702 Allow Batch Sorted Merge for unordered chunks with no
segmentbyor when allsegmentbycolumns are pinned to aConst
Bugfixes
- #9363 Change compression job status when chunks could be compressed
- #9413 Fix incorrect decompress markers on full batch delete
- #9414 Fix
NULLcompression handling inestimate_uncompressed_size - #9417 Fix segfault in
bloom1_contains - #9479 Disallow sub-day offset for
time-bucketonDate - #9482 Forbid Batch Sort Merge on nullable
orderbycolumns - #9490 Disallow negative interval as
chunk_interval - #9500 Fix off-by-one error when building object name
- #9519 Remove self-referential
FOREIGN KEYconstraints from catalog - #9561 Simplify job history retention by replacing binary search and temp table
- #9590 Fix policy skipping uncompressed chunks
- #9596 Remove unused
process_hypertable_invalidationspolicy code - #9604 Remove dead
post_parse_analyze_hookcapture in loader - #9610 Fix use-after-free crash in
cache_destroyduring transaction abort - #9632 Preserve chunk settings during recompress
- #9640 Fix
NULLdatumCopycrash insegmentbyanalysis - #9680 Fix segfault in direct compress insert on hypertable with dropped column
- #9692 Fix internal "invalid perminfoindex 0 in RTE" error on
MERGE NOT MATCHED INSERTinto a hypertable - #9705 Avoid double
TOASTdelete whenDELETE-after-compressionis enabled - #9705 Only freeze compressed rows when truncating uncompressed chunk
- #9706 Use
bigintinestimate_uncompressed_sizecalculations - #9709 Reject mismatched element type in
bool/uuiddecompression - #9710 Return
bigintfromcompressed_data_column_size - #9711 Fix registration row leak when continuous aggregate refresh fails
- #9697 Improve
pathkeyhandling for compressed sub-paths during sort transformation - #9743 Fix the composite bloom metadata column naming scheme
- #9767 Skip dropped chunks when trying to remove
ts_cagg_invalidation_trigger - #9747 Reject inheriting from a hypertable
- #9744 Use a fixed call string for the telemetry job in
ts_stat_statementsrecording - #9736 Do logical sparse index comparison
- #9731 Avoid creating overlapping batches during recompression for multi orderby configurations
- #9717 Reject non-positive time bucket width on cagg creation
- #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
Breaking Changes
- Upgrade to TimescaleDB 2.27.0 is blocked for databases containing bloom filter sparse indexes on compressed `int2` columns; these indexes must be dropped manually before the upgrade.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About timescaledb
A time-series database for high-performance real-time analytics packaged as a Postgres extension
Related context
Related tools
Beta — feedback welcome: [email protected]