From 757446bc61b9ef62c3abb2e1a9ad05ddd0087918 Mon Sep 17 00:00:00 2001 From: naisila Date: Fri, 29 Oct 2021 00:26:44 +0300 Subject: [PATCH] Fix index name udf scripts for 10.2 and bump use of new sql functions --- src/backend/distributed/citus.control | 2 +- .../distributed/sql/citus--10.2-3--10.2-4.sql | 7 ++++ .../sql/downgrades/citus--10.2-4--10.2-3.sql | 5 +++ .../10.2-4.sql | 21 +++++++++++ .../10.2-4.sql | 6 ++++ .../10.2-4.sql | 10 ++++++ src/test/regress/expected/multi_extension.out | 35 +++++++++++++++++++ src/test/regress/sql/multi_extension.sql | 20 +++++++++++ 8 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 src/backend/distributed/sql/citus--10.2-3--10.2-4.sql create mode 100644 src/backend/distributed/sql/downgrades/citus--10.2-4--10.2-3.sql create mode 100644 src/backend/distributed/sql/udfs/fix_all_partition_shard_index_names/10.2-4.sql create mode 100644 src/backend/distributed/sql/udfs/fix_partition_shard_index_names/10.2-4.sql create mode 100644 src/backend/distributed/sql/udfs/worker_fix_partition_shard_index_names/10.2-4.sql diff --git a/src/backend/distributed/citus.control b/src/backend/distributed/citus.control index 3197003d2..8445eaa7e 100644 --- a/src/backend/distributed/citus.control +++ b/src/backend/distributed/citus.control @@ -1,6 +1,6 @@ # Citus extension comment = 'Citus distributed database' -default_version = '10.2-3' +default_version = '10.2-4' module_pathname = '$libdir/citus' relocatable = false schema = pg_catalog diff --git a/src/backend/distributed/sql/citus--10.2-3--10.2-4.sql b/src/backend/distributed/sql/citus--10.2-3--10.2-4.sql new file mode 100644 index 000000000..762934edb --- /dev/null +++ b/src/backend/distributed/sql/citus--10.2-3--10.2-4.sql @@ -0,0 +1,7 @@ +-- citus--10.2-3--10.2-4 + +-- bump version to 10.2-4 + +#include "udfs/fix_partition_shard_index_names/10.2-4.sql" +#include "udfs/fix_all_partition_shard_index_names/10.2-4.sql" +#include "udfs/worker_fix_partition_shard_index_names/10.2-4.sql" diff --git a/src/backend/distributed/sql/downgrades/citus--10.2-4--10.2-3.sql b/src/backend/distributed/sql/downgrades/citus--10.2-4--10.2-3.sql new file mode 100644 index 000000000..6280755bf --- /dev/null +++ b/src/backend/distributed/sql/downgrades/citus--10.2-4--10.2-3.sql @@ -0,0 +1,5 @@ +-- citus--10.2-4--10.2-3 + +DROP FUNCTION pg_catalog.fix_all_partition_shard_index_names(); +DROP FUNCTION pg_catalog.fix_partition_shard_index_names(regclass); +DROP FUNCTION pg_catalog.worker_fix_partition_shard_index_names(regclass, text, text); diff --git a/src/backend/distributed/sql/udfs/fix_all_partition_shard_index_names/10.2-4.sql b/src/backend/distributed/sql/udfs/fix_all_partition_shard_index_names/10.2-4.sql new file mode 100644 index 000000000..debb5825c --- /dev/null +++ b/src/backend/distributed/sql/udfs/fix_all_partition_shard_index_names/10.2-4.sql @@ -0,0 +1,21 @@ +CREATE OR REPLACE FUNCTION pg_catalog.fix_all_partition_shard_index_names() + RETURNS SETOF regclass + LANGUAGE plpgsql + AS $$ +DECLARE + dist_partitioned_table_name regclass; +BEGIN + FOR dist_partitioned_table_name IN SELECT p.logicalrelid + FROM pg_dist_partition p + JOIN pg_class c ON p.logicalrelid = c.oid + WHERE c.relkind = 'p' + ORDER BY c.relname, c.oid + LOOP + EXECUTE 'SELECT fix_partition_shard_index_names( ' || quote_literal(dist_partitioned_table_name) || ' )'; + RETURN NEXT dist_partitioned_table_name; + END LOOP; + RETURN; +END; +$$; +COMMENT ON FUNCTION pg_catalog.fix_all_partition_shard_index_names() + IS 'fix index names on partition shards of all tables'; diff --git a/src/backend/distributed/sql/udfs/fix_partition_shard_index_names/10.2-4.sql b/src/backend/distributed/sql/udfs/fix_partition_shard_index_names/10.2-4.sql new file mode 100644 index 000000000..fe0cadfa0 --- /dev/null +++ b/src/backend/distributed/sql/udfs/fix_partition_shard_index_names/10.2-4.sql @@ -0,0 +1,6 @@ +CREATE FUNCTION pg_catalog.fix_partition_shard_index_names(table_name regclass) + RETURNS void + LANGUAGE C STRICT + AS 'MODULE_PATHNAME', $$fix_partition_shard_index_names$$; +COMMENT ON FUNCTION pg_catalog.fix_partition_shard_index_names(table_name regclass) + IS 'fix index names on partition shards of given table'; diff --git a/src/backend/distributed/sql/udfs/worker_fix_partition_shard_index_names/10.2-4.sql b/src/backend/distributed/sql/udfs/worker_fix_partition_shard_index_names/10.2-4.sql new file mode 100644 index 000000000..830de5c80 --- /dev/null +++ b/src/backend/distributed/sql/udfs/worker_fix_partition_shard_index_names/10.2-4.sql @@ -0,0 +1,10 @@ +CREATE FUNCTION pg_catalog.worker_fix_partition_shard_index_names(parent_shard_index regclass, + partition_shard text, + new_partition_shard_index_name text) + RETURNS void + LANGUAGE C STRICT + AS 'MODULE_PATHNAME', $$worker_fix_partition_shard_index_names$$; +COMMENT ON FUNCTION pg_catalog.worker_fix_partition_shard_index_names(parent_shard_index regclass, + partition_shard text, + new_partition_shard_index_name text) + IS 'fix the name of the index on given partition shard that is child of given parent_index'; diff --git a/src/test/regress/expected/multi_extension.out b/src/test/regress/expected/multi_extension.out index 7e7b40983..29942df65 100644 --- a/src/test/regress/expected/multi_extension.out +++ b/src/test/regress/expected/multi_extension.out @@ -864,6 +864,41 @@ SELECT * FROM multi_extension.print_extension_changes(); --------------------------------------------------------------------- (0 rows) +-- Test downgrade to 10.2-2 from 10.2-3 +ALTER EXTENSION citus UPDATE TO '10.2-3'; +ALTER EXTENSION citus UPDATE TO '10.2-2'; +-- Should be empty result since upgrade+downgrade should be a no-op +SELECT * FROM multi_extension.print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- +(0 rows) + +-- Snapshot of state at 10.2-3 +ALTER EXTENSION citus UPDATE TO '10.2-3'; +SELECT * FROM multi_extension.print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- +(0 rows) + +-- Test downgrade to 10.2-3 from 10.2-4 +ALTER EXTENSION citus UPDATE TO '10.2-4'; +ALTER EXTENSION citus UPDATE TO '10.2-3'; +-- Should be empty result since upgrade+downgrade should be a no-op +SELECT * FROM multi_extension.print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- +(0 rows) + +-- Snapshot of state at 10.2-4 +ALTER EXTENSION citus UPDATE TO '10.2-4'; +SELECT * FROM multi_extension.print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- + | function fix_all_partition_shard_index_names() SETOF regclass + | function fix_partition_shard_index_names(regclass) void + | function worker_fix_partition_shard_index_names(regclass,text,text) void +(3 rows) + DROP TABLE multi_extension.prev_objects, multi_extension.extension_diff; -- show running version SHOW citus.version; diff --git a/src/test/regress/sql/multi_extension.sql b/src/test/regress/sql/multi_extension.sql index bc1c29b36..6b1632914 100644 --- a/src/test/regress/sql/multi_extension.sql +++ b/src/test/regress/sql/multi_extension.sql @@ -356,6 +356,26 @@ SELECT * FROM multi_extension.print_extension_changes(); ALTER EXTENSION citus UPDATE TO '10.2-2'; SELECT * FROM multi_extension.print_extension_changes(); +-- Test downgrade to 10.2-2 from 10.2-3 +ALTER EXTENSION citus UPDATE TO '10.2-3'; +ALTER EXTENSION citus UPDATE TO '10.2-2'; +-- Should be empty result since upgrade+downgrade should be a no-op +SELECT * FROM multi_extension.print_extension_changes(); + +-- Snapshot of state at 10.2-3 +ALTER EXTENSION citus UPDATE TO '10.2-3'; +SELECT * FROM multi_extension.print_extension_changes(); + +-- Test downgrade to 10.2-3 from 10.2-4 +ALTER EXTENSION citus UPDATE TO '10.2-4'; +ALTER EXTENSION citus UPDATE TO '10.2-3'; +-- Should be empty result since upgrade+downgrade should be a no-op +SELECT * FROM multi_extension.print_extension_changes(); + +-- Snapshot of state at 10.2-4 +ALTER EXTENSION citus UPDATE TO '10.2-4'; +SELECT * FROM multi_extension.print_extension_changes(); + DROP TABLE multi_extension.prev_objects, multi_extension.extension_diff; -- show running version