From a0da426a78d876e58dcbbb085b0e2ad01fa2ad37 Mon Sep 17 00:00:00 2001 From: gindibay Date: Fri, 27 Oct 2023 16:51:31 +0300 Subject: [PATCH] Fixes tests --- .../create_drop_database_propagation.out | 109 ++++++++++++++++++ .../pg15_create_drop_database_propagation.out | 53 ++++++++- .../sql/create_drop_database_propagation.sql | 88 +++++++++++++- .../pg15_create_drop_database_propagation.sql | 37 +++++- 4 files changed, 279 insertions(+), 8 deletions(-) diff --git a/src/test/regress/expected/create_drop_database_propagation.out b/src/test/regress/expected/create_drop_database_propagation.out index 9f98c740c..add4ddac7 100644 --- a/src/test/regress/expected/create_drop_database_propagation.out +++ b/src/test/regress/expected/create_drop_database_propagation.out @@ -1,3 +1,6 @@ +-- test for create/drop database propagation +-- This test is only executes for Postgres 14 +-- For postgres 15 tests, pg15_create_drop_database_propagation.sql is used \set create_drop_db_tablespace :abs_srcdir '/tmp_check/ts3' CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace'; \c - - - :worker_1_port @@ -154,6 +157,112 @@ SELECT result from run_command_on_all_nodes( +(3 rows) + +-- create a template database with all options set and allow connections false +CREATE DATABASE my_template_database + WITH TEMPLATE = 'template0' + OWNER = create_drop_db_test_user + ENCODING = 'UTF8' + STRATEGY = 'wal_log' + LOCALE = 'en_US.utf8' + LC_COLLATE = 'POSIX' + LC_CTYPE = 'POSIX' + ICU_LOCALE = 'en-US' + LOCALE_PROVIDER = 'icu' + COLLATION_VERSION = '1.0' + TABLESPACE = create_drop_db_tablespace + ALLOW_CONNECTIONS = false + IS_TEMPLATE = true; +SET citus.log_remote_commands = false; +SELECT result from run_command_on_all_nodes( + $$ + SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( + SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding, + pd.datistemplate, pd.datallowconn, pd.datconnlimit, + pd.datcollate , pd. datctype , pd.datacl, + pa.rolname AS database_owner, pt.spcname AS tablespace + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + join pg_tablespace pt on pd.dattablespace = pt.oid + WHERE datname = 'my_template_database' + ) q2 + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] + [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] + [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] +(3 rows) + +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database my_template_database; +ERROR: cannot drop a template database +SET citus.log_remote_commands = false; +SELECT result from run_command_on_all_nodes( + $$ + SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( + SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding, + pd.datistemplate, pd.datallowconn, pd.datconnlimit, + pd.datcollate , pd. datctype , pd.datacl, + pa.rolname AS database_owner, pt.spcname AS tablespace + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + join pg_tablespace pt on pd.dattablespace = pt.oid + WHERE datname = 'my_template_database' + ) q2 + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] + [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] + [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] +(3 rows) + +SET citus.log_remote_commands = true; +--template databases could not be dropped so we need to change the template flag +SELECT result from run_command_on_all_nodes( + $$ + UPDATE pg_database SET datistemplate = false WHERE datname = 'my_template_database' + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + UPDATE 1 + UPDATE 1 + UPDATE 1 +(3 rows) + +; +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database my_template_database; +NOTICE: issuing DROP DATABASE my_template_database +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing DROP DATABASE my_template_database +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +SET citus.log_remote_commands = false; +SELECT result from run_command_on_all_nodes( + $$ + SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( + SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding, + pd.datistemplate, pd.datallowconn, pd.datconnlimit, + pd.datcollate , pd. datctype , pd.datacl, + pa.rolname AS database_owner, pt.spcname AS tablespace + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + join pg_tablespace pt on pd.dattablespace = pt.oid + WHERE datname = 'my_template_database' + ) q2 + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + + + (3 rows) --tests for special characters in database name diff --git a/src/test/regress/expected/pg15_create_drop_database_propagation.out b/src/test/regress/expected/pg15_create_drop_database_propagation.out index 4c8731421..e1073f980 100644 --- a/src/test/regress/expected/pg15_create_drop_database_propagation.out +++ b/src/test/regress/expected/pg15_create_drop_database_propagation.out @@ -42,6 +42,7 @@ NOTICE: issuing CREATE DATABASE mydatabase TEMPLATE template0 OWNER create_drop DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx NOTICE: issuing CREATE DATABASE mydatabase TEMPLATE template0 OWNER create_drop_db_test_user CONNECTION LIMIT 10 ENCODING 'UTF8' STRATEGY 'wal_log' LOCALE '' LC_COLLATE 'POSIX' LC_CTYPE 'POSIX' ICU_LOCALE 'und' LOCALE_PROVIDER 'icu' COLLATION_VERSION '1.0' TABLESPACE create_drop_db_tablespace ALLOW_CONNECTIONS true IS_TEMPLATE false OID 966345 DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +SET citus.log_remote_commands = false; SELECT result from run_command_on_all_nodes( $$ SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( @@ -63,7 +64,14 @@ SELECT result from run_command_on_all_nodes( [{"datacl": null, "datname": "mydatabase", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": 10, "datistemplate": false, "database_owner": "create_drop_db_test_user"}] (3 rows) +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; drop database mydatabase; +NOTICE: issuing DROP DATABASE mydatabase +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing DROP DATABASE mydatabase +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +SET citus.log_remote_commands = false; SELECT result from run_command_on_all_nodes( $$ SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( @@ -128,16 +136,12 @@ SELECT result from run_command_on_all_nodes( [{"datacl": null, "datname": "mydatabase2", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": true, "datconnlimit": -1, "datistemplate": false, "database_owner": "create_drop_db_test_user"}] (2 rows) -SET citus.log_remote_commands = true; select 1 from citus_add_node('localhost', :worker_2_port); -NOTICE: issuing SET citus.enable_ddl_propagation TO 'off';select pg_catalog.citus_internal_database_command( 'CREATE DATABASE postgres OWNER = postgres ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' TABLESPACE = pg_default ALLOW_CONNECTIONS = ''true'' IS_TEMPLATE = ''false''');select pg_catalog.citus_internal_database_command( 'CREATE DATABASE regression OWNER = postgres ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' TABLESPACE = pg_default ALLOW_CONNECTIONS = ''true'' IS_TEMPLATE = ''false''');select pg_catalog.citus_internal_database_command( 'CREATE DATABASE template1 OWNER = postgres ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' TABLESPACE = pg_default ALLOW_CONNECTIONS = ''true'' IS_TEMPLATE = ''true''');select pg_catalog.citus_internal_database_command( 'CREATE DATABASE template0 OWNER = postgres ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' TABLESPACE = pg_default ALLOW_CONNECTIONS = ''false'' IS_TEMPLATE = ''true''');select pg_catalog.citus_internal_database_command( 'CREATE DATABASE mydatabase2 OWNER = create_drop_db_test_user ENCODING = ''UTF8'' LC_COLLATE = ''C'' LC_CTYPE = ''C'' LOCALE_PROVIDER = ''libc'' COLLATION_VERSION = ''1.0'' TABLESPACE = create_drop_db_tablespace ALLOW_CONNECTIONS = ''true'' IS_TEMPLATE = ''false''');ALTER ROLE ALL IN DATABASE regression SET lc_messages = 'C';ALTER ROLE ALL IN DATABASE regression SET lc_monetary = 'C';ALTER ROLE ALL IN DATABASE regression SET lc_numeric = 'C';ALTER ROLE ALL IN DATABASE regression SET lc_time = 'C';ALTER ROLE ALL IN DATABASE regression SET bytea_output = 'hex';ALTER ROLE ALL IN DATABASE regression SET timezone_abbreviations = 'Default';SET citus.enable_ddl_propagation TO 'on' -DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx ?column? --------------------------------------------------------------------- 1 (1 row) -SET citus.log_remote_commands = false; SELECT result from run_command_on_all_nodes( $$ SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( @@ -231,6 +235,32 @@ SELECT result from run_command_on_all_nodes( [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] (3 rows) +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database my_template_database; +ERROR: cannot drop a template database +SET citus.log_remote_commands = false; +SELECT result from run_command_on_all_nodes( + $$ + SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( + SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding, + pd.datistemplate, pd.datallowconn, pd.datconnlimit, + pd.datcollate , pd. datctype , pd.datacl, + pa.rolname AS database_owner, pt.spcname AS tablespace + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + join pg_tablespace pt on pd.dattablespace = pt.oid + WHERE datname = 'my_template_database' + ) q2 + $$ +) ORDER BY result; + result +--------------------------------------------------------------------- + [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] + [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] + [{"datacl": null, "datname": "my_template_database", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "create_drop_db_tablespace", "datallowconn": false, "datconnlimit": -1, "datistemplate": true, "database_owner": "create_drop_db_test_user"}] +(3 rows) + SET citus.log_remote_commands = true; --template databases could not be dropped so we need to change the template flag SELECT result from run_command_on_all_nodes( @@ -274,6 +304,21 @@ SELECT result from run_command_on_all_nodes( (3 rows) +--tests for special characters in database name +set citus.enable_create_database_propagation=on; +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%CREATE DATABASE%'; +create database "mydatabase#1'2"; +NOTICE: issuing CREATE DATABASE "mydatabase#1'2" +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing CREATE DATABASE "mydatabase#1'2" +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database if exists "mydatabase#1'2"; +NOTICE: issuing DROP DATABASE IF EXISTS "mydatabase#1'2" +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx +NOTICE: issuing DROP DATABASE IF EXISTS "mydatabase#1'2" +DETAIL: on server postgres@localhost:xxxxx connectionId: xxxxxxx \c - - - :master_port drop tablespace create_drop_db_tablespace; \c - - - :worker_1_port diff --git a/src/test/regress/sql/create_drop_database_propagation.sql b/src/test/regress/sql/create_drop_database_propagation.sql index 6b95fd83e..d7174808e 100644 --- a/src/test/regress/sql/create_drop_database_propagation.sql +++ b/src/test/regress/sql/create_drop_database_propagation.sql @@ -1,5 +1,7 @@ - +-- test for create/drop database propagation +-- This test is only executes for Postgres 14 +-- For postgres 15 tests, pg15_create_drop_database_propagation.sql is used \set create_drop_db_tablespace :abs_srcdir '/tmp_check/ts3' CREATE TABLESPACE create_drop_db_tablespace LOCATION :'create_drop_db_tablespace'; @@ -135,6 +137,90 @@ SELECT result from run_command_on_all_nodes( $$ ) ORDER BY result; +-- create a template database with all options set and allow connections false +CREATE DATABASE my_template_database + WITH TEMPLATE = 'template0' + OWNER = create_drop_db_test_user + ENCODING = 'UTF8' + STRATEGY = 'wal_log' + LOCALE = 'en_US.utf8' + LC_COLLATE = 'POSIX' + LC_CTYPE = 'POSIX' + ICU_LOCALE = 'en-US' + LOCALE_PROVIDER = 'icu' + COLLATION_VERSION = '1.0' + TABLESPACE = create_drop_db_tablespace + ALLOW_CONNECTIONS = false + IS_TEMPLATE = true; + +SET citus.log_remote_commands = false; + +SELECT result from run_command_on_all_nodes( + $$ + SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( + SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding, + pd.datistemplate, pd.datallowconn, pd.datconnlimit, + pd.datcollate , pd. datctype , pd.datacl, + pa.rolname AS database_owner, pt.spcname AS tablespace + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + join pg_tablespace pt on pd.dattablespace = pt.oid + WHERE datname = 'my_template_database' + ) q2 + $$ +) ORDER BY result; + +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database my_template_database; + +SET citus.log_remote_commands = false; + +SELECT result from run_command_on_all_nodes( + $$ + SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( + SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding, + pd.datistemplate, pd.datallowconn, pd.datconnlimit, + pd.datcollate , pd. datctype , pd.datacl, + pa.rolname AS database_owner, pt.spcname AS tablespace + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + join pg_tablespace pt on pd.dattablespace = pt.oid + WHERE datname = 'my_template_database' + ) q2 + $$ +) ORDER BY result; + +SET citus.log_remote_commands = true; + +--template databases could not be dropped so we need to change the template flag +SELECT result from run_command_on_all_nodes( + $$ + UPDATE pg_database SET datistemplate = false WHERE datname = 'my_template_database' + $$ +) ORDER BY result; + +; + +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database my_template_database; + +SET citus.log_remote_commands = false; +SELECT result from run_command_on_all_nodes( + $$ + SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( + SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding, + pd.datistemplate, pd.datallowconn, pd.datconnlimit, + pd.datcollate , pd. datctype , pd.datacl, + pa.rolname AS database_owner, pt.spcname AS tablespace + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + join pg_tablespace pt on pd.dattablespace = pt.oid + WHERE datname = 'my_template_database' + ) q2 + $$ +) ORDER BY result; + --tests for special characters in database name set citus.enable_create_database_propagation=on; SET citus.log_remote_commands = true; diff --git a/src/test/regress/sql/pg15_create_drop_database_propagation.sql b/src/test/regress/sql/pg15_create_drop_database_propagation.sql index 3c7ac417e..3a8e80ebf 100644 --- a/src/test/regress/sql/pg15_create_drop_database_propagation.sql +++ b/src/test/regress/sql/pg15_create_drop_database_propagation.sql @@ -45,6 +45,8 @@ CREATE DATABASE mydatabase IS_TEMPLATE = false OID = 966345; +SET citus.log_remote_commands = false; + SELECT result from run_command_on_all_nodes( $$ SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( @@ -60,9 +62,11 @@ SELECT result from run_command_on_all_nodes( $$ ) ORDER BY result; - +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; drop database mydatabase; +SET citus.log_remote_commands = false; SELECT result from run_command_on_all_nodes( $$ SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( @@ -114,10 +118,8 @@ SELECT result from run_command_on_all_nodes( ) ORDER BY result; -SET citus.log_remote_commands = true; select 1 from citus_add_node('localhost', :worker_2_port); -SET citus.log_remote_commands = false; SELECT result from run_command_on_all_nodes( $$ SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( @@ -190,7 +192,26 @@ SELECT result from run_command_on_all_nodes( $$ ) ORDER BY result; +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database my_template_database; +SET citus.log_remote_commands = false; + +SELECT result from run_command_on_all_nodes( + $$ + SELECT jsonb_agg(to_jsonb(q2.*)) FROM ( + SELECT pd.datname, pg_encoding_to_char(pd.encoding) as encoding, + pd.datistemplate, pd.datallowconn, pd.datconnlimit, + pd.datcollate , pd. datctype , pd.datacl, + pa.rolname AS database_owner, pt.spcname AS tablespace + FROM pg_database pd + JOIN pg_authid pa ON pd.datdba = pa.oid + join pg_tablespace pt on pd.dattablespace = pt.oid + WHERE datname = 'my_template_database' + ) q2 + $$ +) ORDER BY result; SET citus.log_remote_commands = true; @@ -223,6 +244,16 @@ SELECT result from run_command_on_all_nodes( ) ORDER BY result; +--tests for special characters in database name +set citus.enable_create_database_propagation=on; +SET citus.log_remote_commands = true; +set citus.grep_remote_commands = '%CREATE DATABASE%'; + +create database "mydatabase#1'2"; + +set citus.grep_remote_commands = '%DROP DATABASE%'; +drop database if exists "mydatabase#1'2"; + \c - - - :master_port drop tablespace create_drop_db_tablespace;