Move bgw_job table into _timescaledb_catalog schema#9017
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 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. 🚀 New features to boost your workflow:
|
e588602 to
48f4063
Compare
a08b23a to
8221242
Compare
akuzm
approved these changes
Dec 4, 2025
dc59955 to
a6c24bc
Compare
This allows us to drop the _timescaledb_config schema and have all catalog tables in the same schema
a6c24bc to
487aeab
Compare
fabriziomello
approved these changes
Dec 4, 2025
Contributor
fabriziomello
left a comment
There was a problem hiding this comment.
@svenklemm we should make sure it will not affect other internal projects that uses this metadata table in their SQL statements
Merged
Merged
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`
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This allows us to drop the _timescaledb_config schema and have all catalog tables in the same schema