diff --git a/src/test/regress/expected/multi_schema_support.out b/src/test/regress/expected/multi_schema_support.out index 1208f8159..44dd95066 100644 --- a/src/test/regress/expected/multi_schema_support.out +++ b/src/test/regress/expected/multi_schema_support.out @@ -1084,3 +1084,62 @@ SET search_path TO public; ALTER TABLE test_schema_support.nation_hash SET SCHEMA public; WARNING: not propagating ALTER ... SET SCHEMA commands to worker nodes HINT: Connect to worker nodes directly to manually change schemas of affected objects. +-- we will use this function in next test +CREATE FUNCTION run_command_on_coordinator_and_workers(p_sql text) +RETURNS void LANGUAGE plpgsql AS $$ +BEGIN + EXECUTE p_sql; + PERFORM run_command_on_workers(p_sql); +END;$$; +-- test schema propagation with user other than current user +SELECT run_command_on_coordinator_and_workers('CREATE USER "test-user"'); +NOTICE: not propagating CREATE ROLE/USER commands to worker nodes +HINT: Connect to worker nodes directly to manually create all necessary users and roles. +CONTEXT: SQL statement "CREATE USER "test-user"" +PL/pgSQL function run_command_on_coordinator_and_workers(text) line 3 at EXECUTE + run_command_on_coordinator_and_workers +---------------------------------------- + +(1 row) + +SELECT run_command_on_coordinator_and_workers('GRANT ALL ON DATABASE postgres to "test-user"'); + run_command_on_coordinator_and_workers +---------------------------------------- + +(1 row) + +CREATE SCHEMA schema_with_user AUTHORIZATION "test-user"; +CREATE TABLE schema_with_user.test_table(column1 int); +SELECT create_reference_table('schema_with_user.test_table'); + create_reference_table +------------------------ + +(1 row) + +-- verify that owner of the created schema is test-user +\c - - - :worker_1_port +\dn schema_with_user + List of schemas + Name | Owner +------------------+----------- + schema_with_user | test-user +(1 row) + +\c - - - :master_port +-- we do not use run_command_on_coordinator_and_workers here because when there is CASCADE, it causes deadlock +DROP OWNED BY "test-user" CASCADE; +NOTICE: drop cascades to table schema_with_user.test_table +SELECT run_command_on_workers('DROP OWNED BY "test-user" CASCADE'); + run_command_on_workers +---------------------------------- + (localhost,57637,t,"DROP OWNED") + (localhost,57638,t,"DROP OWNED") +(2 rows) + +SELECT run_command_on_coordinator_and_workers('DROP USER "test-user"'); + run_command_on_coordinator_and_workers +---------------------------------------- + +(1 row) + +DROP FUNCTION run_command_on_coordinator_and_workers(p_sql text); diff --git a/src/test/regress/sql/multi_schema_support.sql b/src/test/regress/sql/multi_schema_support.sql index 2215eead5..a5864a562 100644 --- a/src/test/regress/sql/multi_schema_support.sql +++ b/src/test/regress/sql/multi_schema_support.sql @@ -737,3 +737,31 @@ SET citus.task_executor_type TO "real-time"; -- we expect that it will warn out SET search_path TO public; ALTER TABLE test_schema_support.nation_hash SET SCHEMA public; + +-- we will use this function in next test +CREATE FUNCTION run_command_on_coordinator_and_workers(p_sql text) +RETURNS void LANGUAGE plpgsql AS $$ +BEGIN + EXECUTE p_sql; + PERFORM run_command_on_workers(p_sql); +END;$$; + +-- test schema propagation with user other than current user +SELECT run_command_on_coordinator_and_workers('CREATE USER "test-user"'); +SELECT run_command_on_coordinator_and_workers('GRANT ALL ON DATABASE postgres to "test-user"'); + +CREATE SCHEMA schema_with_user AUTHORIZATION "test-user"; +CREATE TABLE schema_with_user.test_table(column1 int); +SELECT create_reference_table('schema_with_user.test_table'); + +-- verify that owner of the created schema is test-user +\c - - - :worker_1_port +\dn schema_with_user + +\c - - - :master_port +-- we do not use run_command_on_coordinator_and_workers here because when there is CASCADE, it causes deadlock +DROP OWNED BY "test-user" CASCADE; +SELECT run_command_on_workers('DROP OWNED BY "test-user" CASCADE'); +SELECT run_command_on_coordinator_and_workers('DROP USER "test-user"'); + +DROP FUNCTION run_command_on_coordinator_and_workers(p_sql text);