Skip to content

Move bgw_job table into _timescaledb_catalog schema#9017

Merged
svenklemm merged 1 commit into
mainfrom
sven/config_schema
Dec 4, 2025
Merged

Move bgw_job table into _timescaledb_catalog schema#9017
svenklemm merged 1 commit into
mainfrom
sven/config_schema

Conversation

@svenklemm
Copy link
Copy Markdown
Member

@svenklemm svenklemm commented Dec 4, 2025

This allows us to drop the _timescaledb_config schema and have all catalog tables in the same schema

@codecov
Copy link
Copy Markdown

codecov Bot commented Dec 4, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 82.57%. Comparing base (f712be6) to head (487aeab).
⚠️ Report is 136 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #9017      +/-   ##
==========================================
+ Coverage   82.51%   82.57%   +0.05%     
==========================================
  Files         249      249              
  Lines       48538    48512      -26     
  Branches    12382    12378       -4     
==========================================
+ Hits        40050    40057       +7     
- Misses       3527     3549      +22     
+ Partials     4961     4906      -55     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@svenklemm svenklemm force-pushed the sven/config_schema branch 4 times, most recently from e588602 to 48f4063 Compare December 4, 2025 12:26
@svenklemm svenklemm added the tech-debt Needs refactoring and improvement tasks related to the source code and its architecture. label Dec 4, 2025
@svenklemm svenklemm force-pushed the sven/config_schema branch 3 times, most recently from a08b23a to 8221242 Compare December 4, 2025 12:47
@svenklemm svenklemm force-pushed the sven/config_schema branch 4 times, most recently from dc59955 to a6c24bc Compare December 4, 2025 14:07
This allows us to drop the _timescaledb_config schema and have
all catalog tables in the same schema
Copy link
Copy Markdown
Contributor

@fabriziomello fabriziomello left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@svenklemm we should make sure it will not affect other internal projects that uses this metadata table in their SQL statements

@svenklemm svenklemm merged commit e8e98ba into main Dec 4, 2025
44 of 45 checks passed
@svenklemm svenklemm deleted the sven/config_schema branch December 4, 2025 18:25
@svenklemm svenklemm added this to the v2.25.0 milestone Dec 4, 2025
@philkra philkra mentioned this pull request Jan 21, 2026
@gayyappan gayyappan mentioned this pull request Jan 22, 2026
svenklemm pushed a commit that referenced this pull request Jan 29, 2026
## 2.25.0 (2026-01-27)

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](https://github.com/timescale/timescaledb/releases/tag/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](https://github.com/timescale/timescaledb/releases/tag/2.10.0),
has been fully removed from TimescaleDB in this release. Users still on
the old format should read the [migration
documentation](https://www.tigerdata.com/docs/use-timescale/latest/continuous-aggregates/migrate)
to migrate to the new format. Users of Tiger Cloud have already been
automatically migrated.

**Features**
* [#8777](#8777) Enable
direct compress on continuous aggregate refresh using new GUC
`timescaledb.enable_direct_compress_on_cagg_refresh`
* [#9031](#9031) Change
default `buckets_per_batch` on continuous aggregate refresh policy to
`10`
* [#9032](#9032) Add
in-memory recompression for unordered chunks
* [#9017](#9017) Move
`bgw_job` table into schema `_timescaledb_catalog`
* [#9033](#9033) Add
`rebuild_columnstore` procedure
* [#9038](#9038) Change
default configuration for compressed continuous aggregates
* [#9042](#9042) Enable
batch sorted merge on unordered compressed chunks
* [#9046](#9046) Allow non
timescaledb namespace `SET` option for continuous aggregates
* [#9059](#9059) Allow
configuring `work_mem` for background worker jobs
* [#9074](#9074) Add
function to estimate uncompressed size of compressed chunk
* [#9085](#9085) Don't
register timescaledb-tune specific GUCs
* [#9088](#9088) Add
`ColumnarIndexScan` custom node
* [#9090](#9090) Support
direct batch delete on hypertables with continuous aggregates
* [#9094](#9094) Enable the
columnar pipeline for grouping without aggregation to speed up the
queries of the form `select column from table group by column`.
* [#9103](#9103) Support
`FIRST` and `LAST` in `ColumnarIndexScan`
* [#9108](#9108) Support
multiple aggregates in `ColumnarIndexScan`
* [#9111](#9111) Allow
recompression with orderby/index changes
* [#9113](#9113) Use
`enable_columnarscan` to control columnarscan
* [#9127](#9127) Remove
primary dimension constraints from fully covered chunks
* [#8710](#8710) Add SQL
function to fetch continuous aggregate grouping columns
* [#9133](#9133) Allow
pushing down sort into columnar unordered chunks when it is possible
* [#8229](#8229) Removed
`time_bucket_ng` function
* [#8859](#8859) Remove
support for partial continuous aggregate format
* [#9022](#9022) Remove WAL
based invalidation
* [#9016](#9016) Remove
`_timescaledb_debug` schema
* [#9030](#9030) Add new
chunks to hypertable publication

**Bug fixes**
* [#8706](#8706) Fix
planning performance regression on Postgres 16 and later on some join
queries.
* [#8986](#8986) Add
pathkey replacement for `ColumnarScanPath`
* [#8989](#8989) Ensure no
XID is assigned during chunk query
* [#8990](#8990) Fix
`EquivalenceClass` index update for `RelOptInfo`
* [#9007](#9007) Add
validation for compression index key limits
* [#9024](#9024) Recompress
some chunks on `VACUUM FULL`
* [#9045](#9045) Fix
missing UUID check in compression policy
* [#9056](#9056) Fix split
chunk `relfrozenxid`
* [#9058](#9058) Fix
missing chunk column stats bug
* [#9061](#9061) Fix update
race with background worker jobs
* [#9069](#9069) Fix
applying multikey sort for columnstore when one numeric key is pinned to
a Const of different type
* [#9102](#9102) Support
retention policies on UUIDv7-partitioned hypertables
* [#9120](#9120) Fix for
pre Postgres 17, where a `DELETE` from a partially compressed chunk may
miss records if `BitmapHeapScan` is being used
* [#9121](#9121) Allow any
immutable constant expressions as default values for compressed columns
* [#9121](#9121) Fix a
potential "unexpected column type 'bool'" error for compressed bool
columns with missing value
* [#9144](#9144) Fix
handling implicit constraints in `ALTER TABLE`
* [#9155](#9155) Fix column
generation during compressed chunk insert
* [#9129](#9129) Fix
`time_bucket` with timezone during DST
* [#9177](#9177) Add alias
for `bgw_job`
* [#9176](#9176) Handle
`NULL` values in continuous aggregate invalidation more gracefully
* [#9175](#9175) Do not
remove dimension constraints for OSM chunks

**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`

---------

Signed-off-by: Philip Krauss <35487337+philkra@users.noreply.github.com>
Co-authored-by: timescale-automation <123763385+github-actions[bot]@users.noreply.github.com>
Co-authored-by: philkra <philip@philipkrauss.at>
Co-authored-by: Philip Krauss <35487337+philkra@users.noreply.github.com>
Co-authored-by: Anastasiia Tovpeko <114177030+atovpeko@users.noreply.github.com>
svenklemm pushed a commit that referenced this pull request Jan 29, 2026
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](https://github.com/timescale/timescaledb/releases/tag/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](https://github.com/timescale/timescaledb/releases/tag/2.10.0),
has been fully removed from TimescaleDB in this release. Users still on
the old format should read the [migration
documentation](https://www.tigerdata.com/docs/use-timescale/latest/continuous-aggregates/migrate)
to migrate to the new format. Users of Tiger Cloud have already been
automatically migrated.

**Features**
* [#8777](#8777) Enable
direct compress on continuous aggregate refresh using new GUC
`timescaledb.enable_direct_compress_on_cagg_refresh`
* [#9031](#9031) Change
default `buckets_per_batch` on continuous aggregate refresh policy to
`10`
* [#9032](#9032) Add
in-memory recompression for unordered chunks
* [#9017](#9017) Move
`bgw_job` table into schema `_timescaledb_catalog`
* [#9033](#9033) Add
`rebuild_columnstore` procedure
* [#9038](#9038) Change
default configuration for compressed continuous aggregates
* [#9042](#9042) Enable
batch sorted merge on unordered compressed chunks
* [#9046](#9046) Allow non
timescaledb namespace `SET` option for continuous aggregates
* [#9059](#9059) Allow
configuring `work_mem` for background worker jobs
* [#9074](#9074) Add
function to estimate uncompressed size of compressed chunk
* [#9085](#9085) Don't
register timescaledb-tune specific GUCs
* [#9088](#9088) Add
`ColumnarIndexScan` custom node
* [#9090](#9090) Support
direct batch delete on hypertables with continuous aggregates
* [#9094](#9094) Enable the
columnar pipeline for grouping without aggregation to speed up the
queries of the form `select column from table group by column`.
* [#9103](#9103) Support
`FIRST` and `LAST` in `ColumnarIndexScan`
* [#9108](#9108) Support
multiple aggregates in `ColumnarIndexScan`
* [#9111](#9111) Allow
recompression with orderby/index changes
* [#9113](#9113) Use
`enable_columnarscan` to control columnarscan
* [#9127](#9127) Remove
primary dimension constraints from fully covered chunks
* [#8710](#8710) Add SQL
function to fetch continuous aggregate grouping columns
* [#9133](#9133) Allow
pushing down sort into columnar unordered chunks when it is possible
* [#8229](#8229) Removed
`time_bucket_ng` function
* [#8859](#8859) Remove
support for partial continuous aggregate format
* [#9022](#9022) Remove WAL
based invalidation
* [#9016](#9016) Remove
`_timescaledb_debug` schema
* [#9030](#9030) Add new
chunks to hypertable publication

**Bug fixes**
* [#8706](#8706) Fix
planning performance regression on Postgres 16 and later on some join
queries.
* [#8986](#8986) Add
pathkey replacement for `ColumnarScanPath`
* [#8989](#8989) Ensure no
XID is assigned during chunk query
* [#8990](#8990) Fix
`EquivalenceClass` index update for `RelOptInfo`
* [#9007](#9007) Add
validation for compression index key limits
* [#9024](#9024) Recompress
some chunks on `VACUUM FULL`
* [#9045](#9045) Fix
missing UUID check in compression policy
* [#9056](#9056) Fix split
chunk `relfrozenxid`
* [#9058](#9058) Fix
missing chunk column stats bug
* [#9061](#9061) Fix update
race with background worker jobs
* [#9069](#9069) Fix
applying multikey sort for columnstore when one numeric key is pinned to
a Const of different type
* [#9102](#9102) Support
retention policies on UUIDv7-partitioned hypertables
* [#9120](#9120) Fix for
pre Postgres 17, where a `DELETE` from a partially compressed chunk may
miss records if `BitmapHeapScan` is being used
* [#9121](#9121) Allow any
immutable constant expressions as default values for compressed columns
* [#9121](#9121) Fix a
potential "unexpected column type 'bool'" error for compressed bool
columns with missing value
* [#9144](#9144) Fix
handling implicit constraints in `ALTER TABLE`
* [#9155](#9155) Fix column
generation during compressed chunk insert
* [#9129](#9129) Fix
`time_bucket` with timezone during DST
* [#9177](#9177) Add alias
for `bgw_job`
* [#9176](#9176) Handle
`NULL` values in continuous aggregate invalidation more gracefully
* [#9175](#9175) Do not
remove dimension constraints for OSM chunks

**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`

---------

Signed-off-by: Philip Krauss <35487337+philkra@users.noreply.github.com>
Co-authored-by: timescale-automation <123763385+github-actions[bot]@users.noreply.github.com>
Co-authored-by: philkra <philip@philipkrauss.at>
Co-authored-by: Philip Krauss <35487337+philkra@users.noreply.github.com>
Co-authored-by: Anastasiia Tovpeko <114177030+atovpeko@users.noreply.github.com>
svenklemm added a commit that referenced this pull request Jan 29, 2026
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](https://github.com/timescale/timescaledb/releases/tag/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](https://github.com/timescale/timescaledb/releases/tag/2.10.0), has been fully removed from TimescaleDB in this release. Users still on the old format should read the [migration documentation](https://www.tigerdata.com/docs/use-timescale/latest/continuous-aggregates/migrate) to migrate to the new format. Users of Tiger Cloud have already been automatically migrated.

**Features**
* [#8777](#8777) Enable direct compress on continuous aggregate refresh using new GUC `timescaledb.enable_direct_compress_on_cagg_refresh`
* [#9031](#9031) Change default `buckets_per_batch` on continuous aggregate refresh policy to `10`
* [#9032](#9032) Add in-memory recompression for unordered chunks
* [#9017](#9017) Move `bgw_job` table into schema `_timescaledb_catalog`
* [#9033](#9033) Add `rebuild_columnstore` procedure
* [#9038](#9038) Change default configuration for compressed continuous aggregates
* [#9042](#9042) Enable batch sorted merge on unordered compressed chunks
* [#9046](#9046) Allow non timescaledb namespace `SET` option for continuous aggregates
* [#9059](#9059) Allow configuring `work_mem` for background worker jobs
* [#9074](#9074) Add function to estimate uncompressed size of compressed chunk
* [#9085](#9085) Don't register timescaledb-tune specific GUCs
* [#9088](#9088) Add `ColumnarIndexScan` custom node
* [#9090](#9090) Support direct batch delete on hypertables with continuous aggregates
* [#9094](#9094) Enable the columnar pipeline for grouping without aggregation to speed up the queries of the form `select column from table group by column`.
* [#9103](#9103) Support `FIRST` and `LAST` in `ColumnarIndexScan`
* [#9108](#9108) Support multiple aggregates in `ColumnarIndexScan`
* [#9111](#9111) Allow recompression with orderby/index changes
* [#9113](#9113) Use `enable_columnarscan` to control columnarscan
* [#9127](#9127) Remove primary dimension constraints from fully covered chunks
* [#8710](#8710) Add SQL function to fetch continuous aggregate grouping columns
* [#9133](#9133) Allow pushing down sort into columnar unordered chunks when it is possible
* [#8229](#8229) Removed `time_bucket_ng` function
* [#8859](#8859) Remove support for partial continuous aggregate format
* [#9022](#9022) Remove WAL based invalidation
* [#9016](#9016) Remove `_timescaledb_debug` schema
* [#9030](#9030) Add new chunks to hypertable publication

**Bug fixes**
* [#8706](#8706) Fix planning performance regression on Postgres 16 and later on some join queries.
* [#8986](#8986) Add pathkey replacement for `ColumnarScanPath`
* [#8989](#8989) Ensure no XID is assigned during chunk query
* [#8990](#8990) Fix `EquivalenceClass` index update for `RelOptInfo`
* [#9007](#9007) Add validation for compression index key limits
* [#9024](#9024) Recompress some chunks on `VACUUM FULL`
* [#9045](#9045) Fix missing UUID check in compression policy
* [#9056](#9056) Fix split chunk `relfrozenxid`
* [#9058](#9058) Fix missing chunk column stats bug
* [#9061](#9061) Fix update race with background worker jobs
* [#9069](#9069) Fix applying multikey sort for columnstore when one numeric key is pinned to a Const of different type
* [#9102](#9102) Support retention policies on UUIDv7-partitioned hypertables
* [#9120](#9120) Fix for pre Postgres 17, where a `DELETE` from a partially compressed chunk may miss records if `BitmapHeapScan` is being used
* [#9121](#9121) Allow any immutable constant expressions as default values for compressed columns
* [#9121](#9121) Fix a potential "unexpected column type 'bool'" error for compressed bool columns with missing value
* [#9144](#9144) Fix handling implicit constraints in `ALTER TABLE`
* [#9155](#9155) Fix column generation during compressed chunk insert
* [#9129](#9129) Fix `time_bucket` with timezone during DST
* [#9177](#9177) Add alias for `bgw_job`
* [#9176](#9176) Handle `NULL` values in continuous aggregate invalidation more gracefully
* [#9175](#9175) Do not remove dimension constraints for OSM chunks

**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`
svenklemm added a commit that referenced this pull request Jan 29, 2026
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](https://github.com/timescale/timescaledb/releases/tag/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](https://github.com/timescale/timescaledb/releases/tag/2.10.0), has been fully removed from TimescaleDB in this release. Users still on the old format should read the [migration documentation](https://www.tigerdata.com/docs/use-timescale/latest/continuous-aggregates/migrate) to migrate to the new format. Users of Tiger Cloud have already been automatically migrated.

**Features**
* [#8777](#8777) Enable direct compress on continuous aggregate refresh using new GUC `timescaledb.enable_direct_compress_on_cagg_refresh`
* [#9031](#9031) Change default `buckets_per_batch` on continuous aggregate refresh policy to `10`
* [#9032](#9032) Add in-memory recompression for unordered chunks
* [#9017](#9017) Move `bgw_job` table into schema `_timescaledb_catalog`
* [#9033](#9033) Add `rebuild_columnstore` procedure
* [#9038](#9038) Change default configuration for compressed continuous aggregates
* [#9042](#9042) Enable batch sorted merge on unordered compressed chunks
* [#9046](#9046) Allow non timescaledb namespace `SET` option for continuous aggregates
* [#9059](#9059) Allow configuring `work_mem` for background worker jobs
* [#9074](#9074) Add function to estimate uncompressed size of compressed chunk
* [#9085](#9085) Don't register timescaledb-tune specific GUCs
* [#9088](#9088) Add `ColumnarIndexScan` custom node
* [#9090](#9090) Support direct batch delete on hypertables with continuous aggregates
* [#9094](#9094) Enable the columnar pipeline for grouping without aggregation to speed up the queries of the form `select column from table group by column`.
* [#9103](#9103) Support `FIRST` and `LAST` in `ColumnarIndexScan`
* [#9108](#9108) Support multiple aggregates in `ColumnarIndexScan`
* [#9111](#9111) Allow recompression with orderby/index changes
* [#9113](#9113) Use `enable_columnarscan` to control columnarscan
* [#9127](#9127) Remove primary dimension constraints from fully covered chunks
* [#8710](#8710) Add SQL function to fetch continuous aggregate grouping columns
* [#9133](#9133) Allow pushing down sort into columnar unordered chunks when it is possible
* [#8229](#8229) Removed `time_bucket_ng` function
* [#8859](#8859) Remove support for partial continuous aggregate format
* [#9022](#9022) Remove WAL based invalidation
* [#9016](#9016) Remove `_timescaledb_debug` schema
* [#9030](#9030) Add new chunks to hypertable publication

**Bug fixes**
* [#8706](#8706) Fix planning performance regression on Postgres 16 and later on some join queries.
* [#8986](#8986) Add pathkey replacement for `ColumnarScanPath`
* [#8989](#8989) Ensure no XID is assigned during chunk query
* [#8990](#8990) Fix `EquivalenceClass` index update for `RelOptInfo`
* [#9007](#9007) Add validation for compression index key limits
* [#9024](#9024) Recompress some chunks on `VACUUM FULL`
* [#9045](#9045) Fix missing UUID check in compression policy
* [#9056](#9056) Fix split chunk `relfrozenxid`
* [#9058](#9058) Fix missing chunk column stats bug
* [#9061](#9061) Fix update race with background worker jobs
* [#9069](#9069) Fix applying multikey sort for columnstore when one numeric key is pinned to a Const of different type
* [#9102](#9102) Support retention policies on UUIDv7-partitioned hypertables
* [#9120](#9120) Fix for pre Postgres 17, where a `DELETE` from a partially compressed chunk may miss records if `BitmapHeapScan` is being used
* [#9121](#9121) Allow any immutable constant expressions as default values for compressed columns
* [#9121](#9121) Fix a potential "unexpected column type 'bool'" error for compressed bool columns with missing value
* [#9144](#9144) Fix handling implicit constraints in `ALTER TABLE`
* [#9155](#9155) Fix column generation during compressed chunk insert
* [#9129](#9129) Fix `time_bucket` with timezone during DST
* [#9177](#9177) Add alias for `bgw_job`
* [#9176](#9176) Handle `NULL` values in continuous aggregate invalidation more gracefully
* [#9175](#9175) Do not remove dimension constraints for OSM chunks

**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`
svenklemm added a commit that referenced this pull request Jan 29, 2026
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](https://github.com/timescale/timescaledb/releases/tag/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](https://github.com/timescale/timescaledb/releases/tag/2.10.0), has been fully removed from TimescaleDB in this release. Users still on the old format should read the [migration documentation](https://www.tigerdata.com/docs/use-timescale/latest/continuous-aggregates/migrate) to migrate to the new format. Users of Tiger Cloud have already been automatically migrated.

**Features**
* [#8777](#8777) Enable direct compress on continuous aggregate refresh using new GUC `timescaledb.enable_direct_compress_on_cagg_refresh`
* [#9031](#9031) Change default `buckets_per_batch` on continuous aggregate refresh policy to `10`
* [#9032](#9032) Add in-memory recompression for unordered chunks
* [#9017](#9017) Move `bgw_job` table into schema `_timescaledb_catalog`
* [#9033](#9033) Add `rebuild_columnstore` procedure
* [#9038](#9038) Change default configuration for compressed continuous aggregates
* [#9042](#9042) Enable batch sorted merge on unordered compressed chunks
* [#9046](#9046) Allow non timescaledb namespace `SET` option for continuous aggregates
* [#9059](#9059) Allow configuring `work_mem` for background worker jobs
* [#9074](#9074) Add function to estimate uncompressed size of compressed chunk
* [#9085](#9085) Don't register timescaledb-tune specific GUCs
* [#9088](#9088) Add `ColumnarIndexScan` custom node
* [#9090](#9090) Support direct batch delete on hypertables with continuous aggregates
* [#9094](#9094) Enable the columnar pipeline for grouping without aggregation to speed up the queries of the form `select column from table group by column`.
* [#9103](#9103) Support `FIRST` and `LAST` in `ColumnarIndexScan`
* [#9108](#9108) Support multiple aggregates in `ColumnarIndexScan`
* [#9111](#9111) Allow recompression with orderby/index changes
* [#9113](#9113) Use `enable_columnarscan` to control columnarscan
* [#9127](#9127) Remove primary dimension constraints from fully covered chunks
* [#8710](#8710) Add SQL function to fetch continuous aggregate grouping columns
* [#9133](#9133) Allow pushing down sort into columnar unordered chunks when it is possible
* [#8229](#8229) Removed `time_bucket_ng` function
* [#8859](#8859) Remove support for partial continuous aggregate format
* [#9022](#9022) Remove WAL based invalidation
* [#9016](#9016) Remove `_timescaledb_debug` schema
* [#9030](#9030) Add new chunks to hypertable publication

**Bug fixes**
* [#8706](#8706) Fix planning performance regression on Postgres 16 and later on some join queries.
* [#8986](#8986) Add pathkey replacement for `ColumnarScanPath`
* [#8989](#8989) Ensure no XID is assigned during chunk query
* [#8990](#8990) Fix `EquivalenceClass` index update for `RelOptInfo`
* [#9007](#9007) Add validation for compression index key limits
* [#9024](#9024) Recompress some chunks on `VACUUM FULL`
* [#9045](#9045) Fix missing UUID check in compression policy
* [#9056](#9056) Fix split chunk `relfrozenxid`
* [#9058](#9058) Fix missing chunk column stats bug
* [#9061](#9061) Fix update race with background worker jobs
* [#9069](#9069) Fix applying multikey sort for columnstore when one numeric key is pinned to a Const of different type
* [#9102](#9102) Support retention policies on UUIDv7-partitioned hypertables
* [#9120](#9120) Fix for pre Postgres 17, where a `DELETE` from a partially compressed chunk may miss records if `BitmapHeapScan` is being used
* [#9121](#9121) Allow any immutable constant expressions as default values for compressed columns
* [#9121](#9121) Fix a potential "unexpected column type 'bool'" error for compressed bool columns with missing value
* [#9144](#9144) Fix handling implicit constraints in `ALTER TABLE`
* [#9155](#9155) Fix column generation during compressed chunk insert
* [#9129](#9129) Fix `time_bucket` with timezone during DST
* [#9177](#9177) Add alias for `bgw_job`
* [#9176](#9176) Handle `NULL` values in continuous aggregate invalidation more gracefully
* [#9175](#9175) Do not remove dimension constraints for OSM chunks

**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`
@timescale-automation timescale-automation added the released-2.25.0 Released in 2.25.0 label Feb 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

released-2.25.0 Released in 2.25.0 tech-debt Needs refactoring and improvement tasks related to the source code and its architecture.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants