diff --git a/.unreleased/compressed-sort-transform b/.unreleased/compressed-sort-transform deleted file mode 100644 index 5e5e91ed0ff..00000000000 --- a/.unreleased/compressed-sort-transform +++ /dev/null @@ -1 +0,0 @@ -Implements: #7528 Transform sorting on `time_bucket` to sorting on time for compressed chunks in some cases. diff --git a/.unreleased/pr_6901 b/.unreleased/pr_6901 deleted file mode 100644 index 70af3960865..00000000000 --- a/.unreleased/pr_6901 +++ /dev/null @@ -1 +0,0 @@ -Implements: #6901: Add hypertable support for transition tables. diff --git a/.unreleased/pr_7104 b/.unreleased/pr_7104 deleted file mode 100644 index 143808aa3cf..00000000000 --- a/.unreleased/pr_7104 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7104: Hypercore table access method. diff --git a/.unreleased/pr_7271 b/.unreleased/pr_7271 deleted file mode 100644 index 3f002c8995f..00000000000 --- a/.unreleased/pr_7271 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7271: Push down `order by` in real-time continuous aggregate queries. diff --git a/.unreleased/pr_7295 b/.unreleased/pr_7295 deleted file mode 100644 index 4ccbebe088e..00000000000 --- a/.unreleased/pr_7295 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7295: Support `alter table set access method` on hypertable. diff --git a/.unreleased/pr_7378 b/.unreleased/pr_7378 deleted file mode 100644 index b917991e10d..00000000000 --- a/.unreleased/pr_7378 +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: #7378: Remove obsolete job referencing `policy_job_error_retention`. -Thanks: @pgloader for reporting the issue in an internal background job. diff --git a/.unreleased/pr_7390 b/.unreleased/pr_7390 deleted file mode 100644 index 74c1e4d0947..00000000000 --- a/.unreleased/pr_7390 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7390: Disable custom `hashagg` planner code. diff --git a/.unreleased/pr_7409 b/.unreleased/pr_7409 deleted file mode 100644 index ac9cfb22d4f..00000000000 --- a/.unreleased/pr_7409 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7409: Update `bgw_job` table when altering procedure. diff --git a/.unreleased/pr_7411 b/.unreleased/pr_7411 deleted file mode 100644 index 537885a7dd2..00000000000 --- a/.unreleased/pr_7411 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7411: Change parameter name to enable hypercore table access method. diff --git a/.unreleased/pr_7412 b/.unreleased/pr_7412 deleted file mode 100644 index 86f2368b534..00000000000 --- a/.unreleased/pr_7412 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7412: Add GUC for `hypercore_use_access_method` default. diff --git a/.unreleased/pr_7413 b/.unreleased/pr_7413 deleted file mode 100644 index 53f2a223bae..00000000000 --- a/.unreleased/pr_7413 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7413: Add GUC for segmentwise recompression. diff --git a/.unreleased/pr_7426 b/.unreleased/pr_7426 deleted file mode 100644 index d2eb7768462..00000000000 --- a/.unreleased/pr_7426 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7426: Fix `datetime` parsing error in chunk constraint creation. diff --git a/.unreleased/pr_7432 b/.unreleased/pr_7432 deleted file mode 100644 index 30ff2ac3c5e..00000000000 --- a/.unreleased/pr_7432 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7432: Verify that the heap tuple is valid before using. diff --git a/.unreleased/pr_7433 b/.unreleased/pr_7433 deleted file mode 100644 index c733d50d429..00000000000 --- a/.unreleased/pr_7433 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7433 Add support for merging chunks diff --git a/.unreleased/pr_7434 b/.unreleased/pr_7434 deleted file mode 100644 index dfc43438871..00000000000 --- a/.unreleased/pr_7434 +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: #7434: Fixes the segfault when internally setting the replica identity for a given chunk. -Thanks: @bharrisau for reporting the segfault when creating chunks. diff --git a/.unreleased/pr_7436 b/.unreleased/pr_7436 deleted file mode 100644 index 8f7b34d56bb..00000000000 --- a/.unreleased/pr_7436 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7436 Add index creation on orderby columns diff --git a/.unreleased/pr_7443 b/.unreleased/pr_7443 deleted file mode 100644 index 17ae70064cb..00000000000 --- a/.unreleased/pr_7443 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7443: Add hypercore function and view aliases. diff --git a/.unreleased/pr_7455 b/.unreleased/pr_7455 deleted file mode 100644 index 27624c0c2dd..00000000000 --- a/.unreleased/pr_7455 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7455: Support `drop not null` on compressed hypertables. diff --git a/.unreleased/pr_7482 b/.unreleased/pr_7482 deleted file mode 100644 index ea8c07aa726..00000000000 --- a/.unreleased/pr_7482 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7482: Optimize recompression of partially compressed chunks. diff --git a/.unreleased/pr_7486 b/.unreleased/pr_7486 deleted file mode 100644 index a4d1a58498e..00000000000 --- a/.unreleased/pr_7486 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7486: Prevent building against postgres versions with broken ABI. diff --git a/.unreleased/pr_7488 b/.unreleased/pr_7488 deleted file mode 100644 index a1507ecc518..00000000000 --- a/.unreleased/pr_7488 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7488: Emit error for transition table trigger on chunks. diff --git a/.unreleased/pr_7514 b/.unreleased/pr_7514 deleted file mode 100644 index fe62a0f9d14..00000000000 --- a/.unreleased/pr_7514 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7514: Fix the error: `invalid child of chunk append`. diff --git a/.unreleased/pr_7517 b/.unreleased/pr_7517 deleted file mode 100644 index d664cdfd347..00000000000 --- a/.unreleased/pr_7517 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7517 Fixes performance regression on `cagg_migrate` procedure diff --git a/.unreleased/pr_7521 b/.unreleased/pr_7521 deleted file mode 100644 index a230550a94c..00000000000 --- a/.unreleased/pr_7521 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7521 Add optional `force` argument to `refresh_continuous_aggregate` diff --git a/.unreleased/pr_7527 b/.unreleased/pr_7527 deleted file mode 100644 index 534b8bec629..00000000000 --- a/.unreleased/pr_7527 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7527 Restart scheduler on error diff --git a/.unreleased/pr_7557 b/.unreleased/pr_7557 deleted file mode 100644 index 2fcd79a6dbe..00000000000 --- a/.unreleased/pr_7557 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7557: Fix null handling for in-memory tuple filtering. diff --git a/.unreleased/pr_7565 b/.unreleased/pr_7565 deleted file mode 100644 index 1dde2c8222b..00000000000 --- a/.unreleased/pr_7565 +++ /dev/null @@ -1,2 +0,0 @@ -Implements: #7565 Add hint when hypertable creation fails -Thanks: @k-rus for suggesting the improvement diff --git a/.unreleased/pr_7566 b/.unreleased/pr_7566 deleted file mode 100644 index ca3c51d8392..00000000000 --- a/.unreleased/pr_7566 +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: #7566 Improve transaction check in CAgg refresh -Thanks: @staticlibs for sending PR to improve transaction check in CAgg refresh diff --git a/.unreleased/pr_7584 b/.unreleased/pr_7584 deleted file mode 100644 index dec2e4e1912..00000000000 --- a/.unreleased/pr_7584 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7584 Fix NaN-handling for vectorized aggregation diff --git a/.unreleased/pr_7587 b/.unreleased/pr_7587 deleted file mode 100644 index bd14aaf1c90..00000000000 --- a/.unreleased/pr_7587 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7587 Add `include_tiered_data` parameter to `add_continuous_aggregate_policy` API diff --git a/.unreleased/resolve-vars b/.unreleased/resolve-vars deleted file mode 100644 index aa006e923a4..00000000000 --- a/.unreleased/resolve-vars +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: #7410: Fix the `aggregated compressed column not found` error on aggregation query. -Thanks: @uasiddiqi for reporting the `aggregated compressed column not found` error. diff --git a/.unreleased/vectorized-agg-filter b/.unreleased/vectorized-agg-filter deleted file mode 100644 index b68087e0355..00000000000 --- a/.unreleased/vectorized-agg-filter +++ /dev/null @@ -1 +0,0 @@ -Implements: #7458: Support vecorized aggregation with aggregate `filter` clauses that are also vectorizable. diff --git a/.unreleased/vectorized-grouping-one-fixed b/.unreleased/vectorized-grouping-one-fixed deleted file mode 100644 index c2ad06aa2b9..00000000000 --- a/.unreleased/vectorized-grouping-one-fixed +++ /dev/null @@ -1 +0,0 @@ -Implements: #7341: Vectorized aggregation with grouping by one fixed-size by-value compressed column (such as arithmetic types). diff --git a/CHANGELOG.md b/CHANGELOG.md index d745eb8a037..4bbd514bdcb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,68 @@ `psql` with the `-X` flag to prevent any `.psqlrc` commands from accidentally triggering the load of a previous DB version.** + +## 2.18.0 (2025-01-23) + +This release improves `group by` performance of compressing data and filters, +introduces the ability to add secondary indexes, and contains the highly upvoted +community request of transition table support. We recommend that you upgrade at the +next available opportunity. + +**Highlighted features in this release** +* TAM +* Significant performance improvements for aggregations using a `group by` with one column +and/or using a filter clause. SIMD +* Transition tables + +**Dropping support for Bitnami images** +After the recent change in Bitnami’s [LTS support policy](https://github.com/bitnami/containers/issues/75671), +we are no longer building Bitnami images for TimescaleDB. + +**Features** +* #7341: Vectorized aggregation with grouping by one fixed-size by-value compressed column (such as arithmetic types). +* #7104: Hypercore table access method. +* #6901: Add hypertable support for transition tables. +* #7482: Optimize recompression of partially compressed chunks. +* #7458: Support vectorized aggregation with aggregate `filter` clauses that are also vectorizable. +* #7433: Add support for merging chunks. +* #7271: Push down `order by` in real-time continuous aggregate queries. +* #7455: Support `drop not null` on compressed hypertables. +* #7295: Support `alter table set access method` on hypertable. +* #7411: Change parameter name to enable hypercore table access method. +* #7436: Add index creation on `order by` columns. +* #7443: Add hypercore function and view aliases. +* #7521: Add optional `force` argument to `refresh_continuous_aggregate`. +* #7528: Transform sorting on `time_bucket` to sorting on time for compressed chunks in some cases. +* #7565: Add hint when hypertable creation fails. +* #7390: Disable custom `hashagg` planner code. +* #7587: Add `include_tiered_data` parameter to `add_continuous_aggregate_policy` API. +* #7486: Prevent building against PostgreSQL versions with broken ABI. +* #7412: Add [GUC](https://www.postgresql.org/docs/current/acronyms.html#:~:text=GUC) for the `hypercore_use_access_method` default. +* #7413: Add GUC for segmentwise recompression. + +**Bugfixes** +* #7378: Remove obsolete job referencing `policy_job_error_retention`. +* #7409: Update `bgw_job` table when altering procedure. +* #7410: Fix the `aggregated compressed column not found` error on aggregation query. +* #7426: Fix `datetime` parsing error in chunk constraint creation. +* #7432: Verify that the heap tuple is valid before using. +* #7434: Fix the segfault when internally setting the replica identity for a given chunk. +* #7488: Emit error for transition table trigger on chunks. +* #7514: Fix the error: `invalid child of chunk append`. +* #7517: Fix the performance regression on the `cagg_migrate` procedure. +* #7527: Restart scheduler on error. +* #7557: Fix null handling for in-memory tuple filtering. +* #7566: Improve transaction check in CAGG refresh. +* #7584: Fix NaN-handling for vectorized aggregation. + +**Thanks** +* @bharrisau for reporting the segfault when creating chunks. +* @k-rus for suggesting that we add a hint when hypertable creation fails. +* @pgloader for reporting the issue in an internal background job. +* @staticlibs for sending the pull request that improves the transaction check in CAGG refresh. +* @uasiddiqi for reporting the `aggregated compressed column not found` error. + ## 2.17.2 (2024-11-06) This release contains bug fixes since the 2.17.1 release. We recommend that you diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index b3d7f3d39b5..7c875848514 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -45,11 +45,12 @@ set(MOD_FILES updates/2.16.0--2.16.1.sql updates/2.16.1--2.17.0.sql updates/2.17.0--2.17.1.sql - updates/2.17.1--2.17.2.sql) + updates/2.17.1--2.17.2.sql + updates/2.17.2--2.18.0.sql) # The downgrade file to generate a downgrade script for the current version, as # specified in version.config -set(CURRENT_REV_FILE reverse-dev.sql) +set(CURRENT_REV_FILE 2.18.0--2.17.2.sql) # Files for generating old downgrade scripts. This should only include files for # downgrade from one version to its previous version since we do not support # skipping versions when downgrading. @@ -90,7 +91,8 @@ set(OLD_REV_FILES 2.16.1--2.16.0.sql 2.17.0--2.16.1.sql 2.17.1--2.17.0.sql - 2.17.2--2.17.1.sql) + 2.17.2--2.17.1.sql + 2.18.0--2.17.2.sql) set(MODULE_PATHNAME "$libdir/timescaledb-${PROJECT_VERSION_MOD}") set(LOADER_PATHNAME "$libdir/timescaledb") diff --git a/sql/updates/2.17.2--2.18.0.sql b/sql/updates/2.17.2--2.18.0.sql new file mode 100644 index 00000000000..5863834971c --- /dev/null +++ b/sql/updates/2.17.2--2.18.0.sql @@ -0,0 +1,155 @@ +-- remove obsolete job +DELETE FROM _timescaledb_config.bgw_job WHERE id = 2; + +-- Hypercore updates +CREATE FUNCTION _timescaledb_debug.is_compressed_tid(tid) RETURNS BOOL +AS '@MODULE_PATHNAME@', 'ts_update_placeholder' LANGUAGE C STRICT; + +DROP FUNCTION IF EXISTS @extschema@.compress_chunk(uncompressed_chunk REGCLASS, if_not_compressed BOOLEAN, recompress BOOLEAN); + +CREATE FUNCTION @extschema@.compress_chunk( + uncompressed_chunk REGCLASS, + if_not_compressed BOOLEAN = true, + recompress BOOLEAN = false, + hypercore_use_access_method BOOL = NULL +) RETURNS REGCLASS AS '@MODULE_PATHNAME@', 'ts_update_placeholder' LANGUAGE C VOLATILE; + +DROP FUNCTION IF EXISTS @extschema@.add_compression_policy(hypertable REGCLASS, compress_after "any", if_not_exists BOOL, schedule_interval INTERVAL, initial_start TIMESTAMPTZ, timezone TEXT, compress_created_before INTERVAL); + +CREATE FUNCTION @extschema@.add_compression_policy( + hypertable REGCLASS, + compress_after "any" = NULL, + if_not_exists BOOL = false, + schedule_interval INTERVAL = NULL, + initial_start TIMESTAMPTZ = NULL, + timezone TEXT = NULL, + compress_created_before INTERVAL = NULL, + hypercore_use_access_method BOOL = NULL +) +RETURNS INTEGER +AS '@MODULE_PATHNAME@', 'ts_update_placeholder' +LANGUAGE C VOLATILE; + +DROP FUNCTION IF EXISTS timescaledb_experimental.add_policies(relation REGCLASS, if_not_exists BOOL, refresh_start_offset "any", refresh_end_offset "any", compress_after "any", drop_after "any"); + +CREATE FUNCTION timescaledb_experimental.add_policies( + relation REGCLASS, + if_not_exists BOOL = false, + refresh_start_offset "any" = NULL, + refresh_end_offset "any" = NULL, + compress_after "any" = NULL, + drop_after "any" = NULL, + hypercore_use_access_method BOOL = NULL) +RETURNS BOOL +AS '@MODULE_PATHNAME@', 'ts_update_placeholder' +LANGUAGE C VOLATILE; + +DROP PROCEDURE IF EXISTS _timescaledb_functions.policy_compression_execute(job_id INTEGER, htid INTEGER, lag ANYELEMENT, maxchunks INTEGER, verbose_log BOOLEAN, recompress_enabled BOOLEAN, use_creation_time BOOLEAN); + +DROP PROCEDURE IF EXISTS _timescaledb_functions.policy_compression(job_id INTEGER, config JSONB); + +CREATE PROCEDURE @extschema@.convert_to_columnstore( + chunk REGCLASS, + if_not_columnstore BOOLEAN = true, + recompress BOOLEAN = false, + hypercore_use_access_method BOOL = NULL) +AS '@MODULE_PATHNAME@', 'ts_update_placeholder' +LANGUAGE C; + +CREATE PROCEDURE @extschema@.convert_to_rowstore( + chunk REGCLASS, + if_columnstore BOOLEAN = true) +AS '@MODULE_PATHNAME@', 'ts_update_placeholder' +LANGUAGE C; + +CREATE PROCEDURE @extschema@.add_columnstore_policy( + hypertable REGCLASS, + after "any" = NULL, + if_not_exists BOOL = false, + schedule_interval INTERVAL = NULL, + initial_start TIMESTAMPTZ = NULL, + timezone TEXT = NULL, + created_before INTERVAL = NULL, + hypercore_use_access_method BOOL = NULL +) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; + +CREATE PROCEDURE @extschema@.remove_columnstore_policy( + hypertable REGCLASS, + if_exists BOOL = false +) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; + +CREATE FUNCTION @extschema@.chunk_columnstore_stats (hypertable REGCLASS) + RETURNS TABLE ( + chunk_schema name, + chunk_name name, + compression_status text, + before_compression_table_bytes bigint, + before_compression_index_bytes bigint, + before_compression_toast_bytes bigint, + before_compression_total_bytes bigint, + after_compression_table_bytes bigint, + after_compression_index_bytes bigint, + after_compression_toast_bytes bigint, + after_compression_total_bytes bigint, + node_name name) + LANGUAGE SQL + STABLE STRICT + AS 'SELECT * FROM @extschema@.chunk_compression_stats($1)' + SET search_path TO pg_catalog, pg_temp; + +CREATE FUNCTION @extschema@.hypertable_columnstore_stats (hypertable REGCLASS) + RETURNS TABLE ( + total_chunks bigint, + number_compressed_chunks bigint, + before_compression_table_bytes bigint, + before_compression_index_bytes bigint, + before_compression_toast_bytes bigint, + before_compression_total_bytes bigint, + after_compression_table_bytes bigint, + after_compression_index_bytes bigint, + after_compression_toast_bytes bigint, + after_compression_total_bytes bigint, + node_name name) + LANGUAGE SQL + STABLE STRICT + AS 'SELECT * FROM @extschema@.hypertable_compression_stats($1)' + SET search_path TO pg_catalog, pg_temp; + +-- Recreate `refresh_continuous_aggregate` procedure to add `force` argument +DROP PROCEDURE IF EXISTS @extschema@.refresh_continuous_aggregate (continuous_aggregate REGCLASS, window_start "any", window_end "any"); + +CREATE PROCEDURE @extschema@.refresh_continuous_aggregate( + continuous_aggregate REGCLASS, + window_start "any", + window_end "any", + force BOOLEAN = FALSE +) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; + +-- Add `include_tiered_data` argument to `add_continuous_aggregate_policy` +DROP FUNCTION @extschema@.add_continuous_aggregate_policy( + continuous_aggregate REGCLASS, start_offset "any", + end_offset "any", schedule_interval INTERVAL, + if_not_exists BOOL, + initial_start TIMESTAMPTZ, + timezone TEXT +); +CREATE FUNCTION @extschema@.add_continuous_aggregate_policy( + continuous_aggregate REGCLASS, start_offset "any", + end_offset "any", schedule_interval INTERVAL, + if_not_exists BOOL = false, + initial_start TIMESTAMPTZ = NULL, + timezone TEXT = NULL, + include_tiered_data BOOL = NULL +) +RETURNS INTEGER +AS '@MODULE_PATHNAME@', 'ts_update_placeholder' +LANGUAGE C VOLATILE; + +-- Merge chunks +CREATE PROCEDURE @extschema@.merge_chunks( + chunk1 REGCLASS, chunk2 REGCLASS +) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; + +CREATE PROCEDURE @extschema@.merge_chunks( + chunks REGCLASS[] +) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; diff --git a/sql/updates/2.18.0--2.17.2.sql b/sql/updates/2.18.0--2.17.2.sql new file mode 100644 index 00000000000..89c7935ebbf --- /dev/null +++ b/sql/updates/2.18.0--2.17.2.sql @@ -0,0 +1,93 @@ +-- Hypercore AM +DROP ACCESS METHOD IF EXISTS hypercore_proxy; +DROP FUNCTION IF EXISTS ts_hypercore_proxy_handler; +DROP ACCESS METHOD IF EXISTS hypercore; +DROP FUNCTION IF EXISTS ts_hypercore_handler; +DROP FUNCTION IF EXISTS _timescaledb_debug.is_compressed_tid; + +DROP FUNCTION IF EXISTS @extschema@.compress_chunk(uncompressed_chunk REGCLASS, if_not_compressed BOOLEAN, recompress BOOLEAN, hypercore_use_access_method BOOL); + +CREATE FUNCTION @extschema@.compress_chunk( + uncompressed_chunk REGCLASS, + if_not_compressed BOOLEAN = true, + recompress BOOLEAN = false +) RETURNS REGCLASS AS '@MODULE_PATHNAME@', 'ts_compress_chunk' LANGUAGE C STRICT VOLATILE; + +DROP FUNCTION IF EXISTS @extschema@.add_compression_policy(hypertable REGCLASS, compress_after "any", if_not_exists BOOL, schedule_interval INTERVAL, initial_start TIMESTAMPTZ, timezone TEXT, compress_created_before INTERVAL, hypercore_use_access_method BOOL); + +CREATE FUNCTION @extschema@.add_compression_policy( + hypertable REGCLASS, + compress_after "any" = NULL, + if_not_exists BOOL = false, + schedule_interval INTERVAL = NULL, + initial_start TIMESTAMPTZ = NULL, + timezone TEXT = NULL, + compress_created_before INTERVAL = NULL +) +RETURNS INTEGER +AS '@MODULE_PATHNAME@', 'ts_policy_compression_add' +LANGUAGE C VOLATILE; + +DROP FUNCTION IF EXISTS timescaledb_experimental.add_policies(relation REGCLASS, if_not_exists BOOL, refresh_start_offset "any", refresh_end_offset "any", compress_after "any", drop_after "any", hypercore_use_access_method BOOL); + +CREATE FUNCTION timescaledb_experimental.add_policies( + relation REGCLASS, + if_not_exists BOOL = false, + refresh_start_offset "any" = NULL, + refresh_end_offset "any" = NULL, + compress_after "any" = NULL, + drop_after "any" = NULL) +RETURNS BOOL +AS '@MODULE_PATHNAME@', 'ts_policies_add' +LANGUAGE C VOLATILE; + +DROP PROCEDURE IF EXISTS _timescaledb_functions.policy_compression_execute(job_id INTEGER, htid INTEGER, lag ANYELEMENT, maxchunks INTEGER, verbose_log BOOLEAN, recompress_enabled BOOLEAN, use_creation_time BOOLEAN, useam BOOLEAN); + +DROP PROCEDURE IF EXISTS _timescaledb_functions.policy_compression(job_id INTEGER, config JSONB); +DROP PROCEDURE IF EXISTS @extschema@.convert_to_columnstore(REGCLASS, BOOLEAN, BOOLEAN, BOOLEAN); +DROP PROCEDURE IF EXISTS @extschema@.convert_to_rowstore(REGCLASS, BOOLEAN); +DROP PROCEDURE IF EXISTS @extschema@.add_columnstore_policy(REGCLASS, "any", BOOL, INTERVAL, TIMESTAMPTZ, TEXT, INTERVAL, BOOL); +DROP PROCEDURE IF EXISTS @extschema@.remove_columnstore_policy(REGCLASS, BOOL); +DROP FUNCTION IF EXISTS @extschema@.hypertable_columnstore_stats(REGCLASS); +DROP FUNCTION IF EXISTS @extschema@.chunk_columnstore_stats(REGCLASS); + +ALTER EXTENSION timescaledb DROP VIEW timescaledb_information.hypertable_columnstore_settings; +ALTER EXTENSION timescaledb DROP VIEW timescaledb_information.chunk_columnstore_settings; + +DROP VIEW timescaledb_information.hypertable_columnstore_settings; +DROP VIEW timescaledb_information.chunk_columnstore_settings; + +DROP PROCEDURE IF EXISTS _timescaledb_functions.cagg_migrate_update_watermark(INTEGER); + +-- Recreate `refresh_continuous_aggregate` procedure to remove the `force` argument +DROP PROCEDURE IF EXISTS @extschema@.refresh_continuous_aggregate (continuous_aggregate REGCLASS, window_start "any", window_end "any", force BOOLEAN); + +CREATE PROCEDURE @extschema@.refresh_continuous_aggregate( + continuous_aggregate REGCLASS, + window_start "any", + window_end "any" +) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_continuous_agg_refresh'; + +-- Remove `include_tiered_data` argument from `add_continuous_aggregate_policy` +DROP FUNCTION @extschema@.add_continuous_aggregate_policy( + continuous_aggregate REGCLASS, start_offset "any", + end_offset "any", schedule_interval INTERVAL, + if_not_exists BOOL, + initial_start TIMESTAMPTZ, + timezone TEXT, + include_tiered_data BOOL +); +CREATE FUNCTION @extschema@.add_continuous_aggregate_policy( + continuous_aggregate REGCLASS, start_offset "any", + end_offset "any", schedule_interval INTERVAL, + if_not_exists BOOL = false, + initial_start TIMESTAMPTZ = NULL, + timezone TEXT = NULL +) +RETURNS INTEGER +AS '@MODULE_PATHNAME@', 'ts_policy_refresh_cagg_add' +LANGUAGE C VOLATILE; + +-- Merge chunks +DROP PROCEDURE IF EXISTS @extschema@.merge_chunks(chunk1 REGCLASS, chunk2 REGCLASS); +DROP PROCEDURE IF EXISTS @extschema@.merge_chunks(chunks REGCLASS[]); diff --git a/sql/updates/latest-dev.sql b/sql/updates/latest-dev.sql index 5863834971c..e69de29bb2d 100644 --- a/sql/updates/latest-dev.sql +++ b/sql/updates/latest-dev.sql @@ -1,155 +0,0 @@ --- remove obsolete job -DELETE FROM _timescaledb_config.bgw_job WHERE id = 2; - --- Hypercore updates -CREATE FUNCTION _timescaledb_debug.is_compressed_tid(tid) RETURNS BOOL -AS '@MODULE_PATHNAME@', 'ts_update_placeholder' LANGUAGE C STRICT; - -DROP FUNCTION IF EXISTS @extschema@.compress_chunk(uncompressed_chunk REGCLASS, if_not_compressed BOOLEAN, recompress BOOLEAN); - -CREATE FUNCTION @extschema@.compress_chunk( - uncompressed_chunk REGCLASS, - if_not_compressed BOOLEAN = true, - recompress BOOLEAN = false, - hypercore_use_access_method BOOL = NULL -) RETURNS REGCLASS AS '@MODULE_PATHNAME@', 'ts_update_placeholder' LANGUAGE C VOLATILE; - -DROP FUNCTION IF EXISTS @extschema@.add_compression_policy(hypertable REGCLASS, compress_after "any", if_not_exists BOOL, schedule_interval INTERVAL, initial_start TIMESTAMPTZ, timezone TEXT, compress_created_before INTERVAL); - -CREATE FUNCTION @extschema@.add_compression_policy( - hypertable REGCLASS, - compress_after "any" = NULL, - if_not_exists BOOL = false, - schedule_interval INTERVAL = NULL, - initial_start TIMESTAMPTZ = NULL, - timezone TEXT = NULL, - compress_created_before INTERVAL = NULL, - hypercore_use_access_method BOOL = NULL -) -RETURNS INTEGER -AS '@MODULE_PATHNAME@', 'ts_update_placeholder' -LANGUAGE C VOLATILE; - -DROP FUNCTION IF EXISTS timescaledb_experimental.add_policies(relation REGCLASS, if_not_exists BOOL, refresh_start_offset "any", refresh_end_offset "any", compress_after "any", drop_after "any"); - -CREATE FUNCTION timescaledb_experimental.add_policies( - relation REGCLASS, - if_not_exists BOOL = false, - refresh_start_offset "any" = NULL, - refresh_end_offset "any" = NULL, - compress_after "any" = NULL, - drop_after "any" = NULL, - hypercore_use_access_method BOOL = NULL) -RETURNS BOOL -AS '@MODULE_PATHNAME@', 'ts_update_placeholder' -LANGUAGE C VOLATILE; - -DROP PROCEDURE IF EXISTS _timescaledb_functions.policy_compression_execute(job_id INTEGER, htid INTEGER, lag ANYELEMENT, maxchunks INTEGER, verbose_log BOOLEAN, recompress_enabled BOOLEAN, use_creation_time BOOLEAN); - -DROP PROCEDURE IF EXISTS _timescaledb_functions.policy_compression(job_id INTEGER, config JSONB); - -CREATE PROCEDURE @extschema@.convert_to_columnstore( - chunk REGCLASS, - if_not_columnstore BOOLEAN = true, - recompress BOOLEAN = false, - hypercore_use_access_method BOOL = NULL) -AS '@MODULE_PATHNAME@', 'ts_update_placeholder' -LANGUAGE C; - -CREATE PROCEDURE @extschema@.convert_to_rowstore( - chunk REGCLASS, - if_columnstore BOOLEAN = true) -AS '@MODULE_PATHNAME@', 'ts_update_placeholder' -LANGUAGE C; - -CREATE PROCEDURE @extschema@.add_columnstore_policy( - hypertable REGCLASS, - after "any" = NULL, - if_not_exists BOOL = false, - schedule_interval INTERVAL = NULL, - initial_start TIMESTAMPTZ = NULL, - timezone TEXT = NULL, - created_before INTERVAL = NULL, - hypercore_use_access_method BOOL = NULL -) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; - -CREATE PROCEDURE @extschema@.remove_columnstore_policy( - hypertable REGCLASS, - if_exists BOOL = false -) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; - -CREATE FUNCTION @extschema@.chunk_columnstore_stats (hypertable REGCLASS) - RETURNS TABLE ( - chunk_schema name, - chunk_name name, - compression_status text, - before_compression_table_bytes bigint, - before_compression_index_bytes bigint, - before_compression_toast_bytes bigint, - before_compression_total_bytes bigint, - after_compression_table_bytes bigint, - after_compression_index_bytes bigint, - after_compression_toast_bytes bigint, - after_compression_total_bytes bigint, - node_name name) - LANGUAGE SQL - STABLE STRICT - AS 'SELECT * FROM @extschema@.chunk_compression_stats($1)' - SET search_path TO pg_catalog, pg_temp; - -CREATE FUNCTION @extschema@.hypertable_columnstore_stats (hypertable REGCLASS) - RETURNS TABLE ( - total_chunks bigint, - number_compressed_chunks bigint, - before_compression_table_bytes bigint, - before_compression_index_bytes bigint, - before_compression_toast_bytes bigint, - before_compression_total_bytes bigint, - after_compression_table_bytes bigint, - after_compression_index_bytes bigint, - after_compression_toast_bytes bigint, - after_compression_total_bytes bigint, - node_name name) - LANGUAGE SQL - STABLE STRICT - AS 'SELECT * FROM @extschema@.hypertable_compression_stats($1)' - SET search_path TO pg_catalog, pg_temp; - --- Recreate `refresh_continuous_aggregate` procedure to add `force` argument -DROP PROCEDURE IF EXISTS @extschema@.refresh_continuous_aggregate (continuous_aggregate REGCLASS, window_start "any", window_end "any"); - -CREATE PROCEDURE @extschema@.refresh_continuous_aggregate( - continuous_aggregate REGCLASS, - window_start "any", - window_end "any", - force BOOLEAN = FALSE -) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; - --- Add `include_tiered_data` argument to `add_continuous_aggregate_policy` -DROP FUNCTION @extschema@.add_continuous_aggregate_policy( - continuous_aggregate REGCLASS, start_offset "any", - end_offset "any", schedule_interval INTERVAL, - if_not_exists BOOL, - initial_start TIMESTAMPTZ, - timezone TEXT -); -CREATE FUNCTION @extschema@.add_continuous_aggregate_policy( - continuous_aggregate REGCLASS, start_offset "any", - end_offset "any", schedule_interval INTERVAL, - if_not_exists BOOL = false, - initial_start TIMESTAMPTZ = NULL, - timezone TEXT = NULL, - include_tiered_data BOOL = NULL -) -RETURNS INTEGER -AS '@MODULE_PATHNAME@', 'ts_update_placeholder' -LANGUAGE C VOLATILE; - --- Merge chunks -CREATE PROCEDURE @extschema@.merge_chunks( - chunk1 REGCLASS, chunk2 REGCLASS -) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; - -CREATE PROCEDURE @extschema@.merge_chunks( - chunks REGCLASS[] -) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_update_placeholder'; diff --git a/sql/updates/reverse-dev.sql b/sql/updates/reverse-dev.sql index 89c7935ebbf..e69de29bb2d 100644 --- a/sql/updates/reverse-dev.sql +++ b/sql/updates/reverse-dev.sql @@ -1,93 +0,0 @@ --- Hypercore AM -DROP ACCESS METHOD IF EXISTS hypercore_proxy; -DROP FUNCTION IF EXISTS ts_hypercore_proxy_handler; -DROP ACCESS METHOD IF EXISTS hypercore; -DROP FUNCTION IF EXISTS ts_hypercore_handler; -DROP FUNCTION IF EXISTS _timescaledb_debug.is_compressed_tid; - -DROP FUNCTION IF EXISTS @extschema@.compress_chunk(uncompressed_chunk REGCLASS, if_not_compressed BOOLEAN, recompress BOOLEAN, hypercore_use_access_method BOOL); - -CREATE FUNCTION @extschema@.compress_chunk( - uncompressed_chunk REGCLASS, - if_not_compressed BOOLEAN = true, - recompress BOOLEAN = false -) RETURNS REGCLASS AS '@MODULE_PATHNAME@', 'ts_compress_chunk' LANGUAGE C STRICT VOLATILE; - -DROP FUNCTION IF EXISTS @extschema@.add_compression_policy(hypertable REGCLASS, compress_after "any", if_not_exists BOOL, schedule_interval INTERVAL, initial_start TIMESTAMPTZ, timezone TEXT, compress_created_before INTERVAL, hypercore_use_access_method BOOL); - -CREATE FUNCTION @extschema@.add_compression_policy( - hypertable REGCLASS, - compress_after "any" = NULL, - if_not_exists BOOL = false, - schedule_interval INTERVAL = NULL, - initial_start TIMESTAMPTZ = NULL, - timezone TEXT = NULL, - compress_created_before INTERVAL = NULL -) -RETURNS INTEGER -AS '@MODULE_PATHNAME@', 'ts_policy_compression_add' -LANGUAGE C VOLATILE; - -DROP FUNCTION IF EXISTS timescaledb_experimental.add_policies(relation REGCLASS, if_not_exists BOOL, refresh_start_offset "any", refresh_end_offset "any", compress_after "any", drop_after "any", hypercore_use_access_method BOOL); - -CREATE FUNCTION timescaledb_experimental.add_policies( - relation REGCLASS, - if_not_exists BOOL = false, - refresh_start_offset "any" = NULL, - refresh_end_offset "any" = NULL, - compress_after "any" = NULL, - drop_after "any" = NULL) -RETURNS BOOL -AS '@MODULE_PATHNAME@', 'ts_policies_add' -LANGUAGE C VOLATILE; - -DROP PROCEDURE IF EXISTS _timescaledb_functions.policy_compression_execute(job_id INTEGER, htid INTEGER, lag ANYELEMENT, maxchunks INTEGER, verbose_log BOOLEAN, recompress_enabled BOOLEAN, use_creation_time BOOLEAN, useam BOOLEAN); - -DROP PROCEDURE IF EXISTS _timescaledb_functions.policy_compression(job_id INTEGER, config JSONB); -DROP PROCEDURE IF EXISTS @extschema@.convert_to_columnstore(REGCLASS, BOOLEAN, BOOLEAN, BOOLEAN); -DROP PROCEDURE IF EXISTS @extschema@.convert_to_rowstore(REGCLASS, BOOLEAN); -DROP PROCEDURE IF EXISTS @extschema@.add_columnstore_policy(REGCLASS, "any", BOOL, INTERVAL, TIMESTAMPTZ, TEXT, INTERVAL, BOOL); -DROP PROCEDURE IF EXISTS @extschema@.remove_columnstore_policy(REGCLASS, BOOL); -DROP FUNCTION IF EXISTS @extschema@.hypertable_columnstore_stats(REGCLASS); -DROP FUNCTION IF EXISTS @extschema@.chunk_columnstore_stats(REGCLASS); - -ALTER EXTENSION timescaledb DROP VIEW timescaledb_information.hypertable_columnstore_settings; -ALTER EXTENSION timescaledb DROP VIEW timescaledb_information.chunk_columnstore_settings; - -DROP VIEW timescaledb_information.hypertable_columnstore_settings; -DROP VIEW timescaledb_information.chunk_columnstore_settings; - -DROP PROCEDURE IF EXISTS _timescaledb_functions.cagg_migrate_update_watermark(INTEGER); - --- Recreate `refresh_continuous_aggregate` procedure to remove the `force` argument -DROP PROCEDURE IF EXISTS @extschema@.refresh_continuous_aggregate (continuous_aggregate REGCLASS, window_start "any", window_end "any", force BOOLEAN); - -CREATE PROCEDURE @extschema@.refresh_continuous_aggregate( - continuous_aggregate REGCLASS, - window_start "any", - window_end "any" -) LANGUAGE C AS '@MODULE_PATHNAME@', 'ts_continuous_agg_refresh'; - --- Remove `include_tiered_data` argument from `add_continuous_aggregate_policy` -DROP FUNCTION @extschema@.add_continuous_aggregate_policy( - continuous_aggregate REGCLASS, start_offset "any", - end_offset "any", schedule_interval INTERVAL, - if_not_exists BOOL, - initial_start TIMESTAMPTZ, - timezone TEXT, - include_tiered_data BOOL -); -CREATE FUNCTION @extschema@.add_continuous_aggregate_policy( - continuous_aggregate REGCLASS, start_offset "any", - end_offset "any", schedule_interval INTERVAL, - if_not_exists BOOL = false, - initial_start TIMESTAMPTZ = NULL, - timezone TEXT = NULL -) -RETURNS INTEGER -AS '@MODULE_PATHNAME@', 'ts_policy_refresh_cagg_add' -LANGUAGE C VOLATILE; - --- Merge chunks -DROP PROCEDURE IF EXISTS @extschema@.merge_chunks(chunk1 REGCLASS, chunk2 REGCLASS); -DROP PROCEDURE IF EXISTS @extschema@.merge_chunks(chunks REGCLASS[]); diff --git a/version.config b/version.config index 69be6f54f70..a458437f1eb 100644 --- a/version.config +++ b/version.config @@ -1,3 +1,3 @@ -version = 2.18.0-dev +version = 2.18.0 update_from_version = 2.17.2 downgrade_to_version = 2.17.2