timescale/timescaledb
 Watch   
 Star   
 Fork   
16 hours ago
timescaledb

2.26.1 (2026-03-30)

This release contains bug fixes since the 2.26.0 release. We recommend that you upgrade at the next available opportunity.

Bugfixes

  • #9455 Fix memory leak in ColumnarScan
6 days ago
timescaledb

2.26.0 (2026-03-24)

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

Highlighted features in TimescaleDB v2.26.0

  • The vectorized aggregation engine now evaluates PostgreSQL functions directly on columnar arguments and stores the results in a columnar format to preserve the high-speed execution pipeline. For analytical queries that leverage functions like time_bucket() in grouping or aggregation expressions, the function is evaluated natively without falling back to standard row-based processing. This enhancement ensures that the remainder of the query can seamlessly continue using the highly efficient columnar pipeline, yielding performance improvements of 3.5 times faster.
  • The query execution engine now supports composite bloom filters for SELECT and UPSERT operations, pushing down multi-column predicates directly to compressed table scans. This optimization bypasses costly batch decompression by automatically selecting the most restrictive bloom filter to quickly verify if target values are present. Showing over two times faster query performance when a composite bloom filter is used. Additionally, query profiling now includes detailed EXPLAIN statistics to monitor batch pruning and false-positive rates.
  • The custom node ColumnarIndexScan adjusts the query plan to fetch values from the sparse minmax indexes, improving query performance on the columnstore by up to 70x. For analytical queries that leverage functions like COUNT, MIN, MAX, FIRST (limited), and LAST (limited), the sparse index is being read instead of decompressing the batch.

Features

  • #9104 Support min(text), max(text) for C collation in columnar aggregation pipeline
  • #9117 Support functions like time_bucket in the columnar aggregation and grouping pipeline.
  • #9142 Remove column dropped from _timescaledb_catalog.chunk
  • #9238 Support non-partial aggregates with vectorized aggregation
  • #9253 Support VectorAgg in subqueries and CTEs
  • #9266 Add support for HAVING to vectorized aggregation
  • #9267 Enable ColumnarIndexScan custom scan
  • #9312 Remove advisory locks from bgw jobs and add graceful cancellation
  • #8983 Add GUC for default chunk time interval
  • #9334 Fix out-of-range timestamp error in WHERE clauses
  • #9368 Enable runtime chunk exclusion on inner side of nested loop join
  • #9372 Push down composite bloom filter checks to SELECT execution
  • #9374 Use bloom filters to eliminate decompression of unrelated compressed batches during UPSERT statements
  • #9382 Fix chunk creation failure after replica identity invalidation
  • #9398 Fix chunk exclusion for IN/ANY on open (time) dimensions

Bugfixes

  • #9401 Fix forced refresh not consuming invalidations
  • #7629 Forbid non-constant timezone parameter in time_bucket_gapfill
  • #9344 Wrong result or crash on cross-type comparison of partitioning column
  • #9356 Potential crash when using a hypertable with partial compression or space partitioning in a nested loop join
  • #9376 Allow CREATE EXTENSION after drop in the same session
  • #9378 Fix foreign key constraint failure when inserting into hypertable with referencing a foreign key
  • #9381 Data loss with direct compress with client-ordered data in an INSERT SELECT from a compressed hypertable
  • #9413 Fix incorrect decompress markers on full batch delete
  • #9414 Fix NULL compression handling in estimate_uncompressed_size
  • #9417 Fix segfault in bloom1_contains

GUCs

  • default_chunk_time_interval: Default chunk time interval for new hypertables. This is an expert configuration, please do not alter unless recommended from Tiger Data.
  • enable_composite_bloom_indexes: Enable creation of bloom composite indexes on compressed chunks. Default: true

Thanks

  • @bronzinni for reporting an issue with foreign keys on hypertables
  • @janpio for reporting an issue with CREATE EXTENSION after dropping and recreating schema
  • @leppaott for reporting a deadlock when deleting jobs
27 days ago
timescaledb

2.25.2 (2026-03-03)

This release contains performance improvements and bug fixes since the 2.25.1 release and a fix for a security vulnerability (https://github.com/timescale/timescaledb/pull/9331). You can check the security advisory for more information on the vulnerability and the platforms that are affected. We recommend that you upgrade as soon as possible.

Bugfixes

https://github.com/timescale/timescaledb/pull/9276 Fix NULL and DEFAULT handling in uniqueness check on compressed chunks https://github.com/timescale/timescaledb/pull/9277 Fix SSL-related build errors https://github.com/timescale/timescaledb/pull/9279 Fix EXPLAIN VERBOSE corrupting targetlist of cached ModifyHypertable plans https://github.com/timescale/timescaledb/pull/9281 Fix real-time continuous aggregates on UUID hypertables https://github.com/timescale/timescaledb/pull/9283 Fix plan-time error when using enum in orderby compression setting https://github.com/timescale/timescaledb/pull/9290 Propagate ALTER OWNER TO to policy jobs https://github.com/timescale/timescaledb/pull/9292 Fix continuous aggregate column rename https://github.com/timescale/timescaledb/pull/9293 Fix time_bucket_gapfill inside LATERAL subqueries https://github.com/timescale/timescaledb/pull/9294 Fix DELETEand UPDATE with WHERE EXISTS on hypertables https://github.com/timescale/timescaledb/pull/9303 Fix segfault in continuous aggregate creation on Postgres 18 https://github.com/timescale/timescaledb/pull/9308 Fix continuous aggregate offset/origin not applied in watermark and refresh window calculations https://github.com/timescale/timescaledb/pull/9314 Fix generated columns always NULL in compressed chunks https://github.com/timescale/timescaledb/pull/9321 Fix segfault when using OLD/NEW refs in RETURNING clause on Postgres 18 https://github.com/timescale/timescaledb/pull/9324 Potential violation of a foreign key constraint referencing a hypertable caused by concurrent DELETE of the key record https://github.com/timescale/timescaledb/pull/9327 Fix handling of generated columns with NOT NULL domain type https://github.com/timescale/timescaledb/pull/9331 Ensure search_path is set before anything else in SQL scripts https://github.com/timescale/timescaledb/pull/9339 Fix segmentwise recompression clearing unordered flag

Thanks

@CaptainCuddleCube for reporting an issue with time_bucket_gapfill and LATERAL subqueries @JacobBrejnbjerg for reporting an issue with generated columns in compressed chunks @Kusumoto for reporting an issue with continuous aggregates on hypertables with UUID columns @arfathyahiya for reporting an issue with renaming columns in continuous aggregates @desertmark for reporting an issue with DELETE/UPDATE and subqueries @flaviofernandes004 for reporting an issue with RETURNING clause and references to OLD/NEW @tureba for fixing SSL-related build errors

2026-02-17 19:10:28
timescaledb

2.25.1 (2026-02-17)

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

Bugfixes

Thanks

  • @emapple for reporting a crash in a query with nested joins and subqueries
2026-01-29 15:52:38
timescaledb

2.25.0 (2026-01-29)

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

Highlighted features in TimescaleDB v2.25.0

This release features multiple improvements for continuous aggregates on the columnstore:

  • Faster refreshes: You can now utilize direct compress during materialized view refreshes, resulting in higher throughput and reduced I/O usage.
  • Efficiency: The enablement of delete optimizations significantly lowers system resource requirements.
  • Smaller transactions: Adjusted defaults for buckets_per_batch to 10 reduces transaction sizes, requiring less WAL holding time.
  • Faster queries: Smarter defaults for segmentby and orderby yield improved query performance and better compression ratio on the columnstore.

Sunsetting announcements

  • This release removes the WAL-based invalidation of continuous aggregates. This feature was introduced in 2.22.0 as tech preview to use logical decoding for building the invalidation logs. The feature was designed for high ingest workloads, reducing the write amplification. With the upcoming stream of improvements to continuous aggregates, this feature was deprioritized and removed.
  • The old continuous aggregate format, deprecated in version 2.10.0, has been fully removed from TimescaleDB in this release. Users still on the old format should read the migration documentation to migrate to the new format. Users of Tiger Cloud have already been automatically migrated.

Features

Bug fixes

GUCs

  • enable_columnarindexscan: Enable returning results directly from compression metadata without decompression. This feature is experimental and in development towards a GA release. Not for production environments. Default: false
  • enable_direct_compress_on_cagg_refresh: Enable experimental support for direct compression during Continuous Aggregate refresh. Default: false
  • enable_qual_filtering: Filter qualifiers on chunks when complete chunk would be included by filter. Default: true

Thanks

  • @t-aistleitner for reporting the planning performance regression on PG16 and later on some join queries.
  • @vahnrr for reporting a crash when adding columns and constraints to a hypertable at the same time
  • @cracksalad and @eyadmba for reporting a bug with timezone handling in time_bucket
2025-12-03 16:54:52
timescaledb

2.24.0 (2025-12-03)

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

Highlighted features in TimescaleDB v2.24.0

  • Direct Compress just got smarter and faster: it now works seamlessly with hypertables generating continuous aggregates. Invalidation ranges are computed directly in-memory based on the ingested batches and written efficiently at transaction commit. This change reduces the IO footprint drastically by removing the write amplification of the invalidation logs.
  • Continuous aggregates now speak UUIDv7: hypertables partitioned by UUIDv7 are fully supported through an enhanced time_bucket that accepts UUIDv7 values and returns precise, timezone-aware timestamps — unlocking powerful time-series analytics on modern UUID-driven table schemas.
  • Lightning-fast recompression: the new recompress := true option on the compress_chunk API enables pure in-memory recompression, delivering a 4–5× speed boost over the previous disk-based process.

ARM support for bloom filters The sparse bloom filter indexes will stop working after upgrade to 2.24. If you are affected by this problem, the warning "bloom filter sparse indexes require action to re-enable" will appear in the Postgres log during upgrade.

In versions before 2.24, the hashing scheme of the bloom filter sparse indexes used to depend on the build options of the TimescaleDB executables. These options are set by the package publishers and might differ between different package sources or even versions. After upgrading to a version with different options, the queries that use the bloom filter lookups could erroneously stop returning the rows that should in fact match the query conditions. The 2.24 release fixes this by using distinct column names for each hashing scheme.

The bloom filter sparse indexes will be disabled on the compressed chunks created before upgrading to 2.24. To re-enable them, you have to decompress and then compress the affected chunks.

If you were running the official APT package on AMD64 architecture, the hashing scheme did not change, and it is safe to use the existing bloom filter sparse indexes. To enable this, set the GUC timescaledb.read_legacy_bloom1_v1 = on in the server configuration.

The chunks compressed after upgrade to 2.24 will use the new index format, and the bloom filter sparse indexes will continue working as usual for these chunks without any intervention.

For more details, refer to the pull request #8761.

Deprecations

Backward-Incompatible Changes

  • #8761 Fix matching rows in queries using the bloom filter sparse indexes potentially not returned after extension upgrade. The version of the bloom filter sparse indexes is changed. The existing indexes will stop working and will require action to re-enable. See the section above for details.

Features

  • #8465 Speed up the filters like x = any(array[...]) using bloom filter sparse indexes.
  • #8569 In-memory recompression
  • #8754 Add concurrent mode for merging chunks
  • #8786 Display chunks view range as timestamps for UUIDv7
  • #8819 Refactor chunk compression logic
  • #8840 Allow ALTER COLUMN TYPE when compression is enabled but no compressed chunks exist
  • #8908 Add time bucketing support for UUIDv7
  • #8909 Support direct compress on hypertables with continuous aggregates
  • #8939 Support continuous aggregates on UUIDv7-partitioned hypertables
  • #8959 Cap continuous aggregate invalidation interval range at chunk boundary
  • #8975 Exclude date/time columns from default segmentby
  • #8993 Add GUC for in-memory recompression

Bugfixes

  • #8839 Improve _timescaledb_functions.cagg_watermark error handling
  • #8853 Change log level of continuous aggregate refresh messages to DEBUG1
  • #8933 Potential crash or seemingly random errors when querying the compressed chunks created on releases before 2.15 and using the minmax sparse indexes.
  • #8942 Fix lateral join handling for compressed chunks
  • #8958 Fix if_not_exists behaviour when adding refresh policy
  • #8969 Gracefully handle missing job stat in background worker
  • #8988 Don't ignore additional filters on same column when building scankeys

GUCs

  • direct_compress_copy_tuple_sort_limit: Number of tuples that can be sorted at once in a COPY operation.
  • direct_compress_insert_tuple_sort_limit: Number of tuples that can be sorted at once in an INSERT operation.
  • read_legacy_bloom1_v1: Enable reading the legacy bloom1 version 1 sparse indexes for SELECT queries.
  • enable_in_memory_recompression: Enable in-memory recompression functionality.

Thanks

  • @bezpechno for implementing ALTER COLUMN TYPE for hypertable with columnstore when no compressed chunks exist
2025-11-13 22:59:52
timescaledb

2.23.1 (2025-11-13)

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

Bugfixes

  • #8873 Don't error on failure to update job stats
  • #8875 Fix decoding of UUID v7 timestamp microseconds
  • #8879 Fix blocker for multiple hierarchical continuous aggregate policies
  • #8882 Fix crash in policy creation

Thanks

  • @alexanderlaw for reporting a crash when creating a policy
  • @leppaott for reporting an issue with hierarchical continuous aggregates
2025-10-29 16:03:03
timescaledb

2.23.0 (2025-10-29)

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

Highlighted features in TimescaleDB v2.23.0

  • This release introduces full PostgreSQL 18 support for all existing features. TimescaleDB v2.23 is available for PostgreSQL 15, 16, 17, and 18.
  • UUIDv7 compression is now enabled by default on the columnstore. This feature was shipped in v2.22.0. It saves you at least 30% of storage and delivers ~2× faster query performance with UUIDv7 columns in the filter conditions.
  • Added the ability to set hypertables to unlogged, addressing an open community request #836. This allows the tradeoff between durability and performance, with the latter being favourable for larger imports.
  • By allowing set-returning functions in continuous aggregates, this releases addresses a long standing blocker, raised by the community #1717.

PostgreSQL 15 deprecation announcement

We will continue supporting PostgreSQL 15 until June 2026. Closer to that time, we will announce the specific TimescaleDB version in which PostgreSQL 15 support will not be included going forward.

Features

  • #8373 More precise estimates of row numbers for columnar storage based on Postgres statistics.
  • #8581 Allow mixing Postgres and TimescaleDB options in ALTER TABLE SET.
  • #8582 Make partition_column in CREATE TABLE WITH optional.
  • #8588 Automatically create a columnstore policy when a hypertable with columnstore enabled is created via CREATE TABLE WITH statement.
  • #8606 Add job history config parameters for maximum successes and failures to keep for each job.
  • #8632 Remove ChunkDispatch custom node.
  • #8637 Add INSERT support for direct compress.
  • #8661 Allow ALTER TABLE ONLY to change reloptions to apply setting changes only to future chunks.
  • #8703 Allow set-returning functions in continuous aggregates.
  • #8734 Support direct compress when inserting into a chunk.
  • #8741 Add support for unlogged hypertables.
  • #8769 Remove continuous aggregate invalidation trigger.
  • #8798 Enable UUIDv7 compression by default.
  • #8804 Remove insert_blocker trigger.

Bugfixes

  • #8561 Show warning when direct compress is skipped due to triggers or unique constraints.
  • #8567 Do not require a job to have executed to show status.
  • #8654 Fix approximate_row_count for compressed chunks.
  • #8704 Fix direct DELETE on compressed chunk.
  • #8728 Don't block dropping hypertables with other objects.
  • #8735 Fix ColumnarScan for UNION queries.
  • #8739 Fix cached utility statements.
  • #8742 Potential internal program error when grouping by bool columns of a compressed hypertable.
  • #8743 Modify schedule interval for job history pruning.
  • #8746 Support show/drop chunks with UUIDv7 partitioning.
  • #8753 Allow sorts over decompressed index scans for ChunkAppend.
  • #8758 Improve error message on catalog version mismatch.
  • #8774 Add GUC for WAL based invalidation of continuous aggregates.
  • #8782 Stops sparse index from allowing multiple options.
  • #8799 Set next_start for WITH clause compression policy.
  • #8807 Only warn but not fail the compression if bloom filter indexes are configured but disabled with a GUC.

GUCs

  • cagg_processing_wal_batch_size: Batch size when processing WAL entries.
  • enable_cagg_wal_based_invalidation: Enable experimental invalidations for continuous aggregates using WAL.
  • enable_direct_compress_insert: Enable direct compression during INSERT.
  • enable_direct_compress_insert_client_sorted: Enable direct compress INSERT with presorted data.
  • enable_direct_compress_insert_sort_batches: Enable batch sorting during direct compress INSERT.

Thanks

  • @brandonpurcell-dev For highlighting issues with show_chunks() and UUIDv7 partitioning
  • @moodgorning for reporting an issue with the timescaledb_information.job_stats view
  • @ruideyllot for reporting set-returning functions not working in continuous aggregates
  • @t-aistleitner for reporting an issue with utility statements in plpgsql functions
2025-09-30 18:14:46
timescaledb

2.22.1 (2025-09-30)

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

This release blocks the ability to leverage concurrent refresh policies in hierarchical continous aggregates, as potential deadlocks can occur. If you have concurrent refresh policies in hierarchical continous aggregates, please disable the jobs, as following:

SELECT alter_job("<job_id_of_concurrent_policy>", scheduled => false);

Bugfixes

  • #7766 Load OSM extension in retention background worker to drop tiered chunks
  • #8550 Error in gapfill with expressions over aggregates and groupby columns and out-of-order columns
  • #8593 Error on change of invalidation method for continuous aggregate
  • #8599 Fix attnum mismatch bug in chunk constraint checks
  • #8607 Fix interrupted continous aggregate refresh materialization phase leaving behind pending materialization ranges
  • #8638 ALTER TABLE RESET for orderby settings
  • #8644 Fix migration script for sparse index configuration
  • #8657 Fix CREATE TABLE WITH when using UUIDv7 partitioning
  • #8659 Don't propagate ALTER TABLE commands to foreign data wrapper chunks
  • #8693 Compressed index not chosen for varchar typed segmentby columns
  • #8707 Block concurrent refresh policies for hierarchical continous aggregate due to potential deadlocks

Thanks

  • @MKrkkl for reporting a bug in Gapfill queries with expressions over aggregates and groupby columns
  • @brandonpurcell-dev for creating a test case that showed a bug in CREATE TABLE WITH when using UUIDv7 partitioning
  • @snyrkill for reporting a bug when interrupting a continous aggregate refresh
2025-09-26 00:46:37
timescaledb

2.21.4 (2025-09-25)

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

Bugfixes

https://github.com/timescale/timescaledb/pull/8667 Fix wrong selectivity estimates uncovered by the recent Postgres minor releases 15.14, 16.10, 17.6.