From 694a2884dd5ec684f3fe2a17cab6b0980d7be669 Mon Sep 17 00:00:00 2001 From: Pallavi Sontakke Date: Fri, 22 Nov 2024 14:01:51 +0530 Subject: [PATCH] ## 2.18.0 This release contains performance improvements and bug fixes since the 2.17.2 release. We recommend that you upgrade at the next available opportunity. **Features** * #7271 Hypercore table access method * #7271 Push down ORDER BY in real time continuous aggregate queries * #7295: Support ALTER TABLE SET ACCESS METHOD on hypertable. * #7390 Disable custom hashagg planner code * #7411 Change parameter name to enable Hypercore TAM * #7412 Add GUC for hypercore_use_access_method default * #7413: Add GUC for segmentwise recompression. * #7455: Support DROP NOT NULL on compressed hypertables **Bugfixes** * #7378 Remove obsolete job referencing policy_job_error_retention * #7409 Update bgw job table when altering procedure * #7426 Fix datetime parsing error in chunk constraint creation * #7432 Verify that heap tuple is valid before using * #7434 Fixes segfault when internally set the replica identity for a given chunk **Thanks** * @bharrisau for reporting the segfault when creating chunks * @pgloader for reporting an issue an internal background job --- .unreleased/pr_7104 | 1 - .unreleased/pr_7271 | 1 - .unreleased/pr_7295 | 1 - .unreleased/pr_7378 | 2 -- .unreleased/pr_7390 | 1 - .unreleased/pr_7409 | 1 - .unreleased/pr_7411 | 1 - .unreleased/pr_7412 | 1 - .unreleased/pr_7413 | 1 - .unreleased/pr_7426 | 1 - .unreleased/pr_7432 | 1 - .unreleased/pr_7434 | 2 -- .unreleased/pr_7455 | 1 - CHANGELOG.md | 29 ++++++++++++++++++++ scripts/merge_changelogs.sh | 2 +- sql/CMakeLists.txt | 8 +++--- sql/updates/2.17.2--2.18.0.sql | 49 ++++++++++++++++++++++++++++++++++ sql/updates/2.18.0--2.17.2.sql | 46 +++++++++++++++++++++++++++++++ sql/updates/latest-dev.sql | 49 ---------------------------------- sql/updates/reverse-dev.sql | 46 ------------------------------- version.config | 2 +- 21 files changed, 131 insertions(+), 115 deletions(-) delete mode 100644 .unreleased/pr_7104 delete mode 100644 .unreleased/pr_7271 delete mode 100644 .unreleased/pr_7295 delete mode 100644 .unreleased/pr_7378 delete mode 100644 .unreleased/pr_7390 delete mode 100644 .unreleased/pr_7409 delete mode 100644 .unreleased/pr_7411 delete mode 100644 .unreleased/pr_7412 delete mode 100644 .unreleased/pr_7413 delete mode 100644 .unreleased/pr_7426 delete mode 100644 .unreleased/pr_7432 delete mode 100644 .unreleased/pr_7434 delete mode 100644 .unreleased/pr_7455 create mode 100644 sql/updates/2.17.2--2.18.0.sql create mode 100644 sql/updates/2.18.0--2.17.2.sql diff --git a/.unreleased/pr_7104 b/.unreleased/pr_7104 deleted file mode 100644 index 2b3c53ba710..00000000000 --- a/.unreleased/pr_7104 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7271 Hypercore table access method \ No newline at end of file diff --git a/.unreleased/pr_7271 b/.unreleased/pr_7271 deleted file mode 100644 index 813c8a2c138..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 d2ba054fee6..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 cbcfc137db0..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 an issue an internal background job diff --git a/.unreleased/pr_7390 b/.unreleased/pr_7390 deleted file mode 100644 index 475f03f7fcd..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 9666dbbc82c..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 0068b46e06d..00000000000 --- a/.unreleased/pr_7411 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7411 Change parameter name to enable Hypercore TAM diff --git a/.unreleased/pr_7412 b/.unreleased/pr_7412 deleted file mode 100644 index d978a7bc9d1..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 e9841a1111f..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 b8ffb610987..00000000000 --- a/.unreleased/pr_7432 +++ /dev/null @@ -1 +0,0 @@ -Fixes: #7432 Verify that heap tuple is valid before using diff --git a/.unreleased/pr_7434 b/.unreleased/pr_7434 deleted file mode 100644 index e2dd46382d9..00000000000 --- a/.unreleased/pr_7434 +++ /dev/null @@ -1,2 +0,0 @@ -Fixes: #7434 Fixes segfault when internally set the replica identity for a given chunk -Thanks: @bharrisau for reporting the segfault when creating chunks diff --git a/.unreleased/pr_7455 b/.unreleased/pr_7455 deleted file mode 100644 index 7f5a2f2429a..00000000000 --- a/.unreleased/pr_7455 +++ /dev/null @@ -1 +0,0 @@ -Implements: #7455: Support DROP NOT NULL on compressed hypertables diff --git a/CHANGELOG.md b/CHANGELOG.md index d745eb8a037..f23c777a272 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,35 @@ `psql` with the `-X` flag to prevent any `.psqlrc` commands from accidentally triggering the load of a previous DB version.** + +## 2.18.0 (2024-11-22) + +This release contains performance improvements and bug fixes since +the 2.17.2 release. We recommend that you upgrade at the next +available opportunity. + + +**Features** +* #7271 Hypercore table access method +* #7271 Push down ORDER BY in real time continuous aggregate queries +* #7295: Support ALTER TABLE SET ACCESS METHOD on hypertable. +* #7390 Disable custom hashagg planner code +* #7411 Change parameter name to enable Hypercore TAM +* #7412 Add GUC for hypercore_use_access_method default +* #7413: Add GUC for segmentwise recompression. +* #7455: Support DROP NOT NULL on compressed hypertables + +**Bugfixes** +* #7378 Remove obsolete job referencing policy_job_error_retention +* #7409 Update bgw job table when altering procedure +* #7426 Fix datetime parsing error in chunk constraint creation +* #7432 Verify that heap tuple is valid before using +* #7434 Fixes segfault when internally set the replica identity for a given chunk + +**Thanks** +* @bharrisau for reporting the segfault when creating chunks +* @pgloader for reporting an issue an internal background job + ## 2.17.2 (2024-11-06) This release contains bug fixes since the 2.17.1 release. We recommend that you diff --git a/scripts/merge_changelogs.sh b/scripts/merge_changelogs.sh index 11e81685d43..4a7d4eb4dd9 100755 --- a/scripts/merge_changelogs.sh +++ b/scripts/merge_changelogs.sh @@ -5,7 +5,7 @@ set -eu # This script build a CHANGELOG.md entry for a new release # -REPO="$(readlink -e "$(dirname "${BASH_SOURCE[0]}")/..")" +REPO="$(greadlink -e "$(dirname "${BASH_SOURCE[0]}")/..")" RELEASE_NOTES_HEADER_TEMPLATE="$REPO/scripts/changelog/RELEASE_NOTES_HEADER.md.j2" echo_changelog() { 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..66ad63058fb --- /dev/null +++ b/sql/updates/2.17.2--2.18.0.sql @@ -0,0 +1,49 @@ +-- 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); 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..e6817621d57 --- /dev/null +++ b/sql/updates/2.18.0--2.17.2.sql @@ -0,0 +1,46 @@ +-- 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); diff --git a/sql/updates/latest-dev.sql b/sql/updates/latest-dev.sql index 66ad63058fb..e69de29bb2d 100644 --- a/sql/updates/latest-dev.sql +++ b/sql/updates/latest-dev.sql @@ -1,49 +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); diff --git a/sql/updates/reverse-dev.sql b/sql/updates/reverse-dev.sql index e6817621d57..e69de29bb2d 100644 --- a/sql/updates/reverse-dev.sql +++ b/sql/updates/reverse-dev.sql @@ -1,46 +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); 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