diff --git a/src/backend/distributed/sql/citus--9.5-2--9.5-3.sql b/src/backend/distributed/sql/citus--9.5-2--9.5-3.sql new file mode 100644 index 000000000..bc4c2699f --- /dev/null +++ b/src/backend/distributed/sql/citus--9.5-2--9.5-3.sql @@ -0,0 +1,7 @@ +-- 9.5-2--9.5-3 was added later as a patch to improve master_update_table_statistics +CREATE OR REPLACE FUNCTION master_update_table_statistics(relation regclass) +RETURNS VOID + LANGUAGE C STRICT + AS 'MODULE_PATHNAME', $$citus_update_table_statistics$$; +COMMENT ON FUNCTION pg_catalog.master_update_table_statistics(regclass) + IS 'updates shard statistics of the given table'; diff --git a/src/backend/distributed/sql/citus--9.5-3--9.5-2.sql b/src/backend/distributed/sql/citus--9.5-3--9.5-2.sql new file mode 100644 index 000000000..9f1d6dcc2 --- /dev/null +++ b/src/backend/distributed/sql/citus--9.5-3--9.5-2.sql @@ -0,0 +1,22 @@ +-- citus--9.5-3--9.5-2 +-- This is a downgrade path that will revert the changes made in citus--9.5-2--9.5-3.sql +-- 9.5-2--9.5-3 was added later as a patch to improve master_update_table_statistics. +-- We have this downgrade script so that we can continue from the main upgrade path +-- when upgrading to later versions. +CREATE OR REPLACE FUNCTION master_update_table_statistics(relation regclass) +RETURNS VOID AS $$ +DECLARE + colocated_tables regclass[]; +BEGIN + SELECT get_colocated_table_array(relation) INTO colocated_tables; + + PERFORM + master_update_shard_statistics(shardid) + FROM + pg_dist_shard + WHERE + logicalrelid = ANY (colocated_tables); +END; +$$ LANGUAGE 'plpgsql'; +COMMENT ON FUNCTION master_update_table_statistics(regclass) + IS 'updates shard statistics of the given table and its colocated tables'; diff --git a/src/test/regress/expected/multi_extension.out b/src/test/regress/expected/multi_extension.out index f855397cb..fbbf98882 100644 --- a/src/test/regress/expected/multi_extension.out +++ b/src/test/regress/expected/multi_extension.out @@ -575,6 +575,82 @@ SELECT * FROM print_extension_changes(); --------------------------------------------------------------------- (0 rows) +-- Test upgrade paths for backported improvement of master_update_table_statistics function +ALTER EXTENSION citus UPDATE TO '9.5-3'; +-- should see the new source code with internal function citus_update_table_statistics +SELECT prosrc FROM pg_proc WHERE proname = 'master_update_table_statistics' ORDER BY 1; + prosrc +--------------------------------------------------------------------- + citus_update_table_statistics +(1 row) + +ALTER EXTENSION citus UPDATE TO '9.5-2'; +-- should see the old source code +SELECT prosrc FROM pg_proc WHERE proname = 'master_update_table_statistics' ORDER BY 1; + prosrc +--------------------------------------------------------------------- + + + DECLARE + + colocated_tables regclass[]; + + BEGIN + + SELECT get_colocated_table_array(relation) INTO colocated_tables;+ + PERFORM + + master_update_shard_statistics(shardid) + + FROM + + pg_dist_shard + + WHERE + + logicalrelid = ANY (colocated_tables); + + END; + + +(1 row) + +-- Should be empty result +SELECT * FROM print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- +(0 rows) + +ALTER EXTENSION citus UPDATE TO '9.5-3'; +-- should see the new source code with internal function citus_update_table_statistics +SELECT prosrc FROM pg_proc WHERE proname = 'master_update_table_statistics' ORDER BY 1; + prosrc +--------------------------------------------------------------------- + citus_update_table_statistics +(1 row) + +-- Should be empty result +SELECT * FROM print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- +(0 rows) + +-- Snapshot of state at 9.5-1 +ALTER EXTENSION citus UPDATE TO '9.5-1'; +-- should see the old source code +SELECT prosrc FROM pg_proc WHERE proname = 'master_update_table_statistics' ORDER BY 1; + prosrc +--------------------------------------------------------------------- + + + DECLARE + + colocated_tables regclass[]; + + BEGIN + + SELECT get_colocated_table_array(relation) INTO colocated_tables;+ + PERFORM + + master_update_shard_statistics(shardid) + + FROM + + pg_dist_shard + + WHERE + + logicalrelid = ANY (colocated_tables); + + END; + + +(1 row) + +-- Should be empty result +SELECT * FROM print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- +(0 rows) + DROP TABLE prev_objects, 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 d46425c5e..3af979488 100644 --- a/src/test/regress/sql/multi_extension.sql +++ b/src/test/regress/sql/multi_extension.sql @@ -267,6 +267,30 @@ SELECT * FROM print_extension_changes(); ALTER EXTENSION citus UPDATE TO '9.5-1'; SELECT * FROM print_extension_changes(); +-- Test upgrade paths for backported improvement of master_update_table_statistics function +ALTER EXTENSION citus UPDATE TO '9.5-3'; +-- should see the new source code with internal function citus_update_table_statistics +SELECT prosrc FROM pg_proc WHERE proname = 'master_update_table_statistics' ORDER BY 1; +ALTER EXTENSION citus UPDATE TO '9.5-2'; + +-- should see the old source code +SELECT prosrc FROM pg_proc WHERE proname = 'master_update_table_statistics' ORDER BY 1; +-- Should be empty result +SELECT * FROM print_extension_changes(); + +ALTER EXTENSION citus UPDATE TO '9.5-3'; +-- should see the new source code with internal function citus_update_table_statistics +SELECT prosrc FROM pg_proc WHERE proname = 'master_update_table_statistics' ORDER BY 1; +-- Should be empty result +SELECT * FROM print_extension_changes(); + +-- Snapshot of state at 9.5-1 +ALTER EXTENSION citus UPDATE TO '9.5-1'; +-- should see the old source code +SELECT prosrc FROM pg_proc WHERE proname = 'master_update_table_statistics' ORDER BY 1; +-- Should be empty result +SELECT * FROM print_extension_changes(); + DROP TABLE prev_objects, extension_diff; -- show running version