diff --git a/src/backend/distributed/sql/citus--9.4-2--9.4-3.sql b/src/backend/distributed/sql/citus--9.4-2--9.4-3.sql new file mode 100644 index 000000000..6ce85c289 --- /dev/null +++ b/src/backend/distributed/sql/citus--9.4-2--9.4-3.sql @@ -0,0 +1,7 @@ +-- 9.4-2--9.4-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.4-3--9.4-2.sql b/src/backend/distributed/sql/citus--9.4-3--9.4-2.sql new file mode 100644 index 000000000..2f30eddf0 --- /dev/null +++ b/src/backend/distributed/sql/citus--9.4-3--9.4-2.sql @@ -0,0 +1,22 @@ +-- citus--9.4-3--9.4-2 +-- This is a downgrade path that will revert the changes made in citus--9.4-2--9.4-3.sql +-- 9.4-2--9.4-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 0aa7ac16e..49d9839e5 100644 --- a/src/test/regress/expected/multi_extension.out +++ b/src/test/regress/expected/multi_extension.out @@ -413,6 +413,82 @@ SELECT * FROM multi_extension.print_extension_changes(); --------------------------------------------------------------------- (0 rows) +-- Test upgrade paths for backported improvement of master_update_table_statistics function +ALTER EXTENSION citus UPDATE TO '9.4-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.4-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 multi_extension.print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- +(0 rows) + +ALTER EXTENSION citus UPDATE TO '9.4-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 multi_extension.print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- +(0 rows) + +-- Snapshot of state at 9.4-1 +ALTER EXTENSION citus UPDATE TO '9.4-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 multi_extension.print_extension_changes(); + previous_object | current_object +--------------------------------------------------------------------- +(0 rows) + -- Test downgrade to 9.4-1 from 9.5-1 ALTER EXTENSION citus UPDATE TO '9.5-1'; BEGIN; diff --git a/src/test/regress/sql/multi_extension.sql b/src/test/regress/sql/multi_extension.sql index 4d55051da..953ad8bbb 100644 --- a/src/test/regress/sql/multi_extension.sql +++ b/src/test/regress/sql/multi_extension.sql @@ -184,6 +184,30 @@ SELECT * FROM multi_extension.print_extension_changes(); ALTER EXTENSION citus UPDATE TO '9.4-1'; SELECT * FROM multi_extension.print_extension_changes(); +-- Test upgrade paths for backported improvement of master_update_table_statistics function +ALTER EXTENSION citus UPDATE TO '9.4-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.4-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 multi_extension.print_extension_changes(); + +ALTER EXTENSION citus UPDATE TO '9.4-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 multi_extension.print_extension_changes(); + +-- Snapshot of state at 9.4-1 +ALTER EXTENSION citus UPDATE TO '9.4-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 multi_extension.print_extension_changes(); + -- Test downgrade to 9.4-1 from 9.5-1 ALTER EXTENSION citus UPDATE TO '9.5-1';