diff --git a/src/test/regress/expected/non_super_user_object_metadata.out b/src/test/regress/expected/non_super_user_object_metadata.out index ebbf9510e..0ff03c0b8 100644 --- a/src/test/regress/expected/non_super_user_object_metadata.out +++ b/src/test/regress/expected/non_super_user_object_metadata.out @@ -79,6 +79,21 @@ SELECT create_distributed_function('test_function(int)'); (1 row) +-- Create and distribute plpgsql extension's function +CREATE OR REPLACE FUNCTION plpgsql_dist_function(text) +RETURNS void +LANGUAGE plpgsql AS +$$ + BEGIN + RAISE NOTICE '%', $1; + END; +$$; +SELECT create_distributed_function('plpgsql_dist_function(text)'); + create_distributed_function +--------------------------------------------------------------------- + +(1 row) + -- show that schema, types, function and sequence has marked as distributed -- on the coordinator node RESET ROLE; @@ -124,6 +139,12 @@ SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dis (function,"{local_schema,test_function}",{integer}) (1 row) +SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema.plpgsql_dist_function'::regproc::oid; + pg_identify_object_as_address +--------------------------------------------------------------------- + (function,"{local_schema,plpgsql_dist_function}",{pg_catalog.text}) +(1 row) + -- show those objects marked as distributed on metadata worker node as well SELECT * FROM run_command_on_workers($$SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema'::regnamespace::oid;$$) ORDER BY 1,2; nodename | nodeport | success | result @@ -174,6 +195,27 @@ SELECT * FROM run_command_on_workers($$SELECT pg_identify_object_as_address(clas localhost | 57638 | t | (function,"{local_schema,test_function}",{integer}) (2 rows) +SELECT * FROM run_command_on_workers($$SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema.plpgsql_dist_function'::regproc::oid;$$) ORDER BY 1,2; + nodename | nodeport | success | result +--------------------------------------------------------------------- + localhost | 57637 | t | (function,"{local_schema,plpgsql_dist_function}",{pg_catalog.text}) + localhost | 57638 | t | (function,"{local_schema,plpgsql_dist_function}",{pg_catalog.text}) +(2 rows) + +-- Show that extension plpgsql is also marked as distributed as a dependency of plpgsl_dist_function +SELECT * FROM (SELECT pg_identify_object_as_address(classid, objid, objsubid) as obj_identifier from citus.pg_dist_object) as obj_identifiers where obj_identifier::text like '%{plpgsql}%'; + obj_identifier +--------------------------------------------------------------------- + (extension,{plpgsql},{}) +(1 row) + +SELECT * FROM run_command_on_workers($$SELECT * FROM (SELECT pg_identify_object_as_address(classid, objid, objsubid) as obj_identifier from citus.pg_dist_object) as obj_identifiers where obj_identifier::text like '%{plpgsql}%';$$) ORDER BY 1,2; + nodename | nodeport | success | result +--------------------------------------------------------------------- + localhost | 57637 | t | (extension,{plpgsql},{}) + localhost | 57638 | t | (extension,{plpgsql},{}) +(2 rows) + -- show that schema is owned by the superuser SELECT rolname FROM pg_roles JOIN pg_namespace ON(pg_namespace.nspowner = pg_roles.oid) WHERE nspname = 'local_schema'; rolname @@ -372,8 +414,9 @@ SELECT * FROM run_command_on_workers($$ SELECT distribution_argument_index FROM -- Show that dropping schema doesn't affect the worker node DROP SCHEMA local_schema CASCADE; -NOTICE: drop cascades to 2 other objects -DETAIL: drop cascades to table metadata_dist_test_table +NOTICE: drop cascades to 3 other objects +DETAIL: drop cascades to function plpgsql_dist_function(text) +drop cascades to table metadata_dist_test_table drop cascades to function metadata_dist_test_proc(integer,integer) SELECT * FROM (SELECT pg_identify_object_as_address(classid, objid, objsubid) as obj_identifier from citus.pg_dist_object) as obj_identifiers where obj_identifier::text like '%{local_schema}%'; obj_identifier diff --git a/src/test/regress/sql/non_super_user_object_metadata.sql b/src/test/regress/sql/non_super_user_object_metadata.sql index 67e9687a3..be965288f 100644 --- a/src/test/regress/sql/non_super_user_object_metadata.sql +++ b/src/test/regress/sql/non_super_user_object_metadata.sql @@ -55,6 +55,18 @@ SET search_path TO local_schema; SELECT create_distributed_table('dist_table', 'a'); SELECT create_distributed_function('test_function(int)'); +-- Create and distribute plpgsql extension's function +CREATE OR REPLACE FUNCTION plpgsql_dist_function(text) +RETURNS void +LANGUAGE plpgsql AS +$$ + BEGIN + RAISE NOTICE '%', $1; + END; +$$; + +SELECT create_distributed_function('plpgsql_dist_function(text)'); + -- show that schema, types, function and sequence has marked as distributed -- on the coordinator node RESET ROLE; @@ -65,6 +77,7 @@ SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dis SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'test_sequence_schema.test_sequence'::regclass::oid; SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema.dist_table_e_seq'::regclass::oid; SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema.test_function'::regproc::oid; +SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema.plpgsql_dist_function'::regproc::oid; -- show those objects marked as distributed on metadata worker node as well SELECT * FROM run_command_on_workers($$SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema'::regnamespace::oid;$$) ORDER BY 1,2; @@ -74,6 +87,11 @@ SELECT * FROM run_command_on_workers($$SELECT pg_identify_object_as_address(clas SELECT * FROM run_command_on_workers($$SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'test_sequence_schema.test_sequence'::regclass::oid;$$) ORDER BY 1,2; SELECT * FROM run_command_on_workers($$SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema.dist_table_e_seq'::regclass::oid;$$) ORDER BY 1,2; SELECT * FROM run_command_on_workers($$SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema.test_function'::regproc::oid;$$) ORDER BY 1,2; +SELECT * FROM run_command_on_workers($$SELECT pg_identify_object_as_address(classid, objid, objsubid) from citus.pg_dist_object where objid = 'local_schema.plpgsql_dist_function'::regproc::oid;$$) ORDER BY 1,2; + +-- Show that extension plpgsql is also marked as distributed as a dependency of plpgsl_dist_function +SELECT * FROM (SELECT pg_identify_object_as_address(classid, objid, objsubid) as obj_identifier from citus.pg_dist_object) as obj_identifiers where obj_identifier::text like '%{plpgsql}%'; +SELECT * FROM run_command_on_workers($$SELECT * FROM (SELECT pg_identify_object_as_address(classid, objid, objsubid) as obj_identifier from citus.pg_dist_object) as obj_identifiers where obj_identifier::text like '%{plpgsql}%';$$) ORDER BY 1,2; -- show that schema is owned by the superuser SELECT rolname FROM pg_roles JOIN pg_namespace ON(pg_namespace.nspowner = pg_roles.oid) WHERE nspname = 'local_schema';