Skip to content

timescaledb

v2.27.0 Breaking

This release includes 1 breaking change for platform teams planning a safe upgrade.

Published 22d Relational Databases
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

analytics database financial-analysis iot postgresql sql
+5 more
tigerdata time-series time-series-database timescaledb tsdb

Affected surfaces

breaking_upgrade

ReleasePort's take

Moderate signal
editorial:auto 13d

TimescaleDB 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 summary

Upgrade 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

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.
  • 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 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 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.

Features

  • #8868 Use PG_MODULE_MAGIC_EXT for PG18
  • #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/AND clause.
  • #9355 Defer segmentby default for direct compress
  • #9374 Use bloom filters to eliminate decompression of unrelated compressed batches during UPSERTs.
  • #9396 Analyze and get segmentby during direct compress
  • #9398 Fix chunk exclusion for IN/ANY on open (time) dimensions
  • #9399 Use bloom filters to reduce decompression during UPDATE/DELETE commands.
  • #9403 Set default segmentby during 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 WHERE clause contains filters not handled through the "Vectorized Filters" facility. This includes e.g. filters on time_bucket().
  • #9458 Remove _timescaledb_functions.repair_relation_acls
  • #9475 Calculate hashes for bloom filter predicates at planning time.
  • #9504 Allow ALTER TABLE RESET on materialization hypertables
  • #9521 Add support for reporting index creation progress
  • #9559 Notice on compression settings change
  • #9569 For nullable orderby columns do segmentwise decompress-compress instead of segmentwise recompress.
  • #9583 Drop existing sparse indexes when dropping columns
  • #9648 Support ENABLE/DISABLE TRIGGER on hypertables
  • #9702 Allow Batch Sorted Merge for unordered chunks with no segmentby or when all segmentby columns are pinned to a Const

Bugfixes

  • #9363 Change compression job status when chunks could be compressed
  • #9413 Fix incorrect decompress markers on full batch delete
  • #9414 Fix NULL compression handling in estimate_uncompressed_size
  • #9417 Fix segfault in bloom1_contains
  • #9479 Disallow sub-day offset for time-bucket on Date
  • #9482 Forbid Batch Sort Merge on nullable orderby columns
  • #9490 Disallow negative interval as chunk_interval
  • #9500 Fix off-by-one error when building object name
  • #9519 Remove self-referential FOREIGN KEY constraints 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_invalidations policy code
  • #9604 Remove dead post_parse_analyze_hook capture in loader
  • #9610 Fix use-after-free crash in cache_destroy during transaction abort
  • #9632 Preserve chunk settings during recompress
  • #9640 Fix NULL datumCopy crash in segmentby analysis
  • #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 INSERT into a hypertable
  • #9705 Avoid double TOAST delete when DELETE-after-compression is enabled
  • #9705 Only freeze compressed rows when truncating uncompressed chunk
  • #9706 Use bigint in estimate_uncompressed_size calculations
  • #9709 Reject mismatched element type in bool/uuid decompression
  • #9710 Return bigint from compressed_data_column_size
  • #9711 Fix registration row leak when continuous aggregate refresh fails
  • #9697 Improve pathkey handling 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_statements recording
  • #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

Track timescaledb

Get notified when new releases ship.

Sign up free

About timescaledb

A time-series database for high-performance real-time analytics packaged as a Postgres extension

All releases →

Beta — feedback welcome: [email protected]