Add DDL tests with non-public schema.

Citus sometimes have regressions around non-default schema support, meaning
not public and not in the search_path, per @marcocitus. This patch changes
some regression tests to use a non-default schema in order to cover more
cases.
pull/1939/head
Dimitri Fontaine 2018-01-10 11:29:11 +01:00
parent e010238280
commit 1f088791bd
2 changed files with 73 additions and 69 deletions

View File

@ -1308,26 +1308,26 @@ SELECT logicalrelid FROM pg_dist_shard WHERE logicalrelid::regclass::text LIKE '
(0 rows) (0 rows)
-- now test DDL changes -- now test DDL changes
CREATE TABLE reference_table_ddl (value_1 int, value_2 float, value_3 text, value_4 timestamp); CREATE TABLE reference_schema.reference_table_ddl (value_1 int, value_2 float, value_3 text, value_4 timestamp);
SELECT create_reference_table('reference_table_ddl'); SELECT create_reference_table('reference_schema.reference_table_ddl');
create_reference_table create_reference_table
------------------------ ------------------------
(1 row) (1 row)
-- CREATE & DROP index and check the workers -- CREATE & DROP index and check the workers
CREATE INDEX reference_index_1 ON reference_table_ddl(value_1); CREATE INDEX reference_index_1 ON reference_schema.reference_table_ddl(value_1);
CREATE INDEX reference_index_2 ON reference_table_ddl(value_2, value_3); CREATE INDEX reference_index_2 ON reference_schema.reference_table_ddl(value_2, value_3);
-- should be able to create/drop UNIQUE index on a reference table -- should be able to create/drop UNIQUE index on a reference table
CREATE UNIQUE INDEX reference_index_3 ON reference_table_ddl(value_1); CREATE UNIQUE INDEX reference_index_3 ON reference_schema.reference_table_ddl(value_1);
-- should be able to add a column -- should be able to add a column
ALTER TABLE reference_table_ddl ADD COLUMN value_5 INTEGER; ALTER TABLE reference_schema.reference_table_ddl ADD COLUMN value_5 INTEGER;
ALTER TABLE reference_table_ddl ALTER COLUMN value_5 SET DATA TYPE FLOAT; ALTER TABLE reference_schema.reference_table_ddl ALTER COLUMN value_5 SET DATA TYPE FLOAT;
ALTER TABLE reference_table_ddl DROP COLUMN value_1; ALTER TABLE reference_schema.reference_table_ddl DROP COLUMN value_1;
ALTER TABLE reference_table_ddl ALTER COLUMN value_2 SET DEFAULT 25.0; ALTER TABLE reference_schema.reference_table_ddl ALTER COLUMN value_2 SET DEFAULT 25.0;
ALTER TABLE reference_table_ddl ALTER COLUMN value_3 SET NOT NULL; ALTER TABLE reference_schema.reference_table_ddl ALTER COLUMN value_3 SET NOT NULL;
-- see that Citus applied all DDLs to the table -- see that Citus applied all DDLs to the table
SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.reference_table_ddl'::regclass; SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='reference_schema.reference_table_ddl'::regclass;
Column | Type | Modifiers Column | Type | Modifiers
---------+-----------------------------+-------------- ---------+-----------------------------+--------------
value_2 | double precision | default 25.0 value_2 | double precision | default 25.0
@ -1336,17 +1336,17 @@ SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.referen
value_5 | double precision | value_5 | double precision |
(4 rows) (4 rows)
\d reference_index_2 \d reference_schema.reference_index_2
Index "public.reference_index_2" Index "reference_schema.reference_index_2"
Column | Type | Definition Column | Type | Definition
---------+------------------+------------ ---------+------------------+------------
value_2 | double precision | value_2 value_2 | double precision | value_2
value_3 | text | value_3 value_3 | text | value_3
btree, for table "public.reference_table_ddl" btree, for table "reference_schema.reference_table_ddl"
-- also to the shard placements -- also to the shard placements
\c - - - :worker_1_port \c - - - :worker_1_port
SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.reference_table_ddl_1250019'::regclass; SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='reference_schema.reference_table_ddl_1250019'::regclass;
Column | Type | Modifiers Column | Type | Modifiers
---------+-----------------------------+-------------- ---------+-----------------------------+--------------
value_2 | double precision | default 25.0 value_2 | double precision | default 25.0
@ -1355,18 +1355,18 @@ SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.referen
value_5 | double precision | value_5 | double precision |
(4 rows) (4 rows)
\d reference_index_2_1250019 \d reference_schema.reference_index_2_1250019
Index "public.reference_index_2_1250019" Index "reference_schema.reference_index_2_1250019"
Column | Type | Definition Column | Type | Definition
---------+------------------+------------ ---------+------------------+------------
value_2 | double precision | value_2 value_2 | double precision | value_2
value_3 | text | value_3 value_3 | text | value_3
btree, for table "public.reference_table_ddl_1250019" btree, for table "reference_schema.reference_table_ddl_1250019"
\c - - - :master_port \c - - - :master_port
DROP INDEX reference_index_2; DROP INDEX reference_schema.reference_index_2;
\c - - - :worker_1_port \c - - - :worker_1_port
SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.reference_table_ddl_1250019'::regclass; SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='reference_schema.reference_table_ddl_1250019'::regclass;
Column | Type | Modifiers Column | Type | Modifiers
---------+-----------------------------+-------------- ---------+-----------------------------+--------------
value_2 | double precision | default 25.0 value_2 | double precision | default 25.0
@ -1375,7 +1375,7 @@ SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.referen
value_5 | double precision | value_5 | double precision |
(4 rows) (4 rows)
\di reference_index_2* \di reference_schema.reference_index_2*
List of relations List of relations
Schema | Name | Type | Owner | Table Schema | Name | Type | Owner | Table
--------+------+------+-------+------- --------+------+------+-------+-------
@ -1383,31 +1383,31 @@ SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.referen
\c - - - :master_port \c - - - :master_port
-- as we expect, setting WITH OIDS does not work for reference tables -- as we expect, setting WITH OIDS does not work for reference tables
ALTER TABLE reference_table_ddl SET WITH OIDS; ALTER TABLE reference_schema.reference_table_ddl SET WITH OIDS;
ERROR: alter table command is currently unsupported ERROR: alter table command is currently unsupported
DETAIL: Only ADD|DROP COLUMN, SET|DROP NOT NULL, SET|DROP DEFAULT, ADD|DROP CONSTRAINT, ATTACH|DETACH PARTITION and TYPE subcommands are supported. DETAIL: Only ADD|DROP COLUMN, SET|DROP NOT NULL, SET|DROP DEFAULT, ADD|DROP CONSTRAINT, ATTACH|DETACH PARTITION and TYPE subcommands are supported.
-- now test the renaming of the table, and back to the expected name -- now test the renaming of the table, and back to the expected name
ALTER TABLE reference_table_ddl RENAME TO reference_table_ddl_test; ALTER TABLE reference_schema.reference_table_ddl RENAME TO reference_table_ddl_test;
ALTER TABLE reference_table_ddl_test RENAME TO reference_table_ddl; ALTER TABLE reference_schema.reference_table_ddl_test RENAME TO reference_table_ddl;
-- now test reference tables against some helper UDFs that Citus provides -- now test reference tables against some helper UDFs that Citus provides
-- cannot delete / drop shards from a reference table -- cannot delete / drop shards from a reference table
SELECT master_apply_delete_command('DELETE FROM reference_table_ddl'); SELECT master_apply_delete_command('DELETE FROM reference_schema.reference_table_ddl');
ERROR: cannot delete from distributed table ERROR: cannot delete from distributed table
DETAIL: Delete statements on reference tables are not supported. DETAIL: Delete statements on reference tables are not supported.
-- cannot add shards -- cannot add shards
SELECT master_create_empty_shard('reference_table_ddl'); SELECT master_create_empty_shard('reference_schema.reference_table_ddl');
ERROR: relation "reference_table_ddl" is a reference table ERROR: relation "reference_schema.reference_table_ddl" is a reference table
DETAIL: We currently don't support creating shards on reference tables DETAIL: We currently don't support creating shards on reference tables
-- master_modify_multiple_shards works, but, does it make sense to use at all? -- master_modify_multiple_shards works, but, does it make sense to use at all?
INSERT INTO reference_table_ddl (value_2, value_3) VALUES (7, 'aa'); INSERT INTO reference_schema.reference_table_ddl (value_2, value_3) VALUES (7, 'aa');
SELECT master_modify_multiple_shards('DELETE FROM reference_table_ddl WHERE value_2 = 7'); SELECT master_modify_multiple_shards('DELETE FROM reference_schema.reference_table_ddl WHERE value_2 = 7');
master_modify_multiple_shards master_modify_multiple_shards
------------------------------- -------------------------------
1 1
(1 row) (1 row)
INSERT INTO reference_table_ddl (value_2, value_3) VALUES (7, 'bb'); INSERT INTO reference_schema.reference_table_ddl (value_2, value_3) VALUES (7, 'bb');
SELECT master_modify_multiple_shards('DELETE FROM reference_table_ddl'); SELECT master_modify_multiple_shards('DELETE FROM reference_schema.reference_table_ddl');
master_modify_multiple_shards master_modify_multiple_shards
------------------------------- -------------------------------
1 1
@ -1415,13 +1415,14 @@ SELECT master_modify_multiple_shards('DELETE FROM reference_table_ddl');
-- get/update the statistics -- get/update the statistics
SELECT part_storage_type, part_key, part_replica_count, part_max_size, SELECT part_storage_type, part_key, part_replica_count, part_max_size,
part_placement_policy FROM master_get_table_metadata('reference_table_ddl'); part_placement_policy
FROM master_get_table_metadata('reference_schema.reference_table_ddl');
part_storage_type | part_key | part_replica_count | part_max_size | part_placement_policy part_storage_type | part_key | part_replica_count | part_max_size | part_placement_policy
-------------------+----------+--------------------+---------------+----------------------- -------------------+----------+--------------------+---------------+-----------------------
t | | 2 | 307200 | 2 t | | 2 | 307200 | 2
(1 row) (1 row)
SELECT shardid AS a_shard_id FROM pg_dist_shard WHERE logicalrelid = 'reference_table_ddl'::regclass \gset SELECT shardid AS a_shard_id FROM pg_dist_shard WHERE logicalrelid = 'reference_schema.reference_table_ddl'::regclass \gset
SELECT master_update_shard_statistics(:a_shard_id); SELECT master_update_shard_statistics(:a_shard_id);
master_update_shard_statistics master_update_shard_statistics
-------------------------------- --------------------------------
@ -1432,11 +1433,12 @@ CREATE TABLE append_reference_tmp_table (id INT);
SELECT master_append_table_to_shard(:a_shard_id, 'append_reference_tmp_table', 'localhost', :master_port); SELECT master_append_table_to_shard(:a_shard_id, 'append_reference_tmp_table', 'localhost', :master_port);
ERROR: cannot append to shardId 1250019 ERROR: cannot append to shardId 1250019
DETAIL: We currently don't support appending to shards in hash-partitioned or reference tables DETAIL: We currently don't support appending to shards in hash-partitioned or reference tables
SELECT master_get_table_ddl_events('reference_table_ddl'); SELECT master_get_table_ddl_events('reference_schema.reference_table_ddl');
master_get_table_ddl_events master_get_table_ddl_events
----------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE TABLE public.reference_table_ddl (value_2 double precision DEFAULT 25.0, value_3 text NOT NULL, value_4 timestamp without time zone, value_5 double precision) CREATE SCHEMA IF NOT EXISTS reference_schema AUTHORIZATION postgres
(1 row) CREATE TABLE reference_schema.reference_table_ddl (value_2 double precision DEFAULT 25.0, value_3 text NOT NULL, value_4 timestamp without time zone, value_5 double precision)
(2 rows)
-- in reality, we wouldn't need to repair any reference table shard placements -- in reality, we wouldn't need to repair any reference table shard placements
-- however, the test could be relevant for other purposes -- however, the test could be relevant for other purposes
@ -1621,7 +1623,7 @@ INSERT INTO reference_table_test VALUES (2, 2.0, '2', '2016-12-02');
ROLLBACK; ROLLBACK;
-- clean up tables -- clean up tables
DROP TABLE reference_table_test, reference_table_test_second, reference_table_test_third, DROP TABLE reference_table_test, reference_table_test_second, reference_table_test_third,
reference_table_test_fourth, reference_table_ddl, reference_table_composite; reference_table_test_fourth, reference_schema.reference_table_ddl, reference_table_composite;
DROP SCHEMA reference_schema CASCADE; DROP SCHEMA reference_schema CASCADE;
NOTICE: drop cascades to 2 other objects NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to table reference_schema.reference_table_test_sixth DETAIL: drop cascades to table reference_schema.reference_table_test_sixth

View File

@ -839,70 +839,72 @@ SELECT logicalrelid FROM pg_dist_shard WHERE logicalrelid::regclass::text LIKE '
-- now test DDL changes -- now test DDL changes
CREATE TABLE reference_table_ddl (value_1 int, value_2 float, value_3 text, value_4 timestamp); CREATE TABLE reference_schema.reference_table_ddl (value_1 int, value_2 float, value_3 text, value_4 timestamp);
SELECT create_reference_table('reference_table_ddl'); SELECT create_reference_table('reference_schema.reference_table_ddl');
-- CREATE & DROP index and check the workers -- CREATE & DROP index and check the workers
CREATE INDEX reference_index_1 ON reference_table_ddl(value_1); CREATE INDEX reference_index_1 ON reference_schema.reference_table_ddl(value_1);
CREATE INDEX reference_index_2 ON reference_table_ddl(value_2, value_3); CREATE INDEX reference_index_2 ON reference_schema.reference_table_ddl(value_2, value_3);
-- should be able to create/drop UNIQUE index on a reference table -- should be able to create/drop UNIQUE index on a reference table
CREATE UNIQUE INDEX reference_index_3 ON reference_table_ddl(value_1); CREATE UNIQUE INDEX reference_index_3 ON reference_schema.reference_table_ddl(value_1);
-- should be able to add a column -- should be able to add a column
ALTER TABLE reference_table_ddl ADD COLUMN value_5 INTEGER; ALTER TABLE reference_schema.reference_table_ddl ADD COLUMN value_5 INTEGER;
ALTER TABLE reference_table_ddl ALTER COLUMN value_5 SET DATA TYPE FLOAT; ALTER TABLE reference_schema.reference_table_ddl ALTER COLUMN value_5 SET DATA TYPE FLOAT;
ALTER TABLE reference_table_ddl DROP COLUMN value_1; ALTER TABLE reference_schema.reference_table_ddl DROP COLUMN value_1;
ALTER TABLE reference_table_ddl ALTER COLUMN value_2 SET DEFAULT 25.0; ALTER TABLE reference_schema.reference_table_ddl ALTER COLUMN value_2 SET DEFAULT 25.0;
ALTER TABLE reference_table_ddl ALTER COLUMN value_3 SET NOT NULL; ALTER TABLE reference_schema.reference_table_ddl ALTER COLUMN value_3 SET NOT NULL;
-- see that Citus applied all DDLs to the table -- see that Citus applied all DDLs to the table
SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.reference_table_ddl'::regclass; SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='reference_schema.reference_table_ddl'::regclass;
\d reference_index_2 \d reference_schema.reference_index_2
-- also to the shard placements -- also to the shard placements
\c - - - :worker_1_port \c - - - :worker_1_port
SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.reference_table_ddl_1250019'::regclass; SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='reference_schema.reference_table_ddl_1250019'::regclass;
\d reference_index_2_1250019 \d reference_schema.reference_index_2_1250019
\c - - - :master_port \c - - - :master_port
DROP INDEX reference_index_2; DROP INDEX reference_schema.reference_index_2;
\c - - - :worker_1_port \c - - - :worker_1_port
SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='public.reference_table_ddl_1250019'::regclass; SELECT "Column", "Type", "Modifiers" FROM table_desc WHERE relid='reference_schema.reference_table_ddl_1250019'::regclass;
\di reference_index_2* \di reference_schema.reference_index_2*
\c - - - :master_port \c - - - :master_port
-- as we expect, setting WITH OIDS does not work for reference tables -- as we expect, setting WITH OIDS does not work for reference tables
ALTER TABLE reference_table_ddl SET WITH OIDS; ALTER TABLE reference_schema.reference_table_ddl SET WITH OIDS;
-- now test the renaming of the table, and back to the expected name -- now test the renaming of the table, and back to the expected name
ALTER TABLE reference_table_ddl RENAME TO reference_table_ddl_test; ALTER TABLE reference_schema.reference_table_ddl RENAME TO reference_table_ddl_test;
ALTER TABLE reference_table_ddl_test RENAME TO reference_table_ddl; ALTER TABLE reference_schema.reference_table_ddl_test RENAME TO reference_table_ddl;
-- now test reference tables against some helper UDFs that Citus provides -- now test reference tables against some helper UDFs that Citus provides
-- cannot delete / drop shards from a reference table -- cannot delete / drop shards from a reference table
SELECT master_apply_delete_command('DELETE FROM reference_table_ddl'); SELECT master_apply_delete_command('DELETE FROM reference_schema.reference_table_ddl');
-- cannot add shards -- cannot add shards
SELECT master_create_empty_shard('reference_table_ddl'); SELECT master_create_empty_shard('reference_schema.reference_table_ddl');
-- master_modify_multiple_shards works, but, does it make sense to use at all? -- master_modify_multiple_shards works, but, does it make sense to use at all?
INSERT INTO reference_table_ddl (value_2, value_3) VALUES (7, 'aa'); INSERT INTO reference_schema.reference_table_ddl (value_2, value_3) VALUES (7, 'aa');
SELECT master_modify_multiple_shards('DELETE FROM reference_table_ddl WHERE value_2 = 7'); SELECT master_modify_multiple_shards('DELETE FROM reference_schema.reference_table_ddl WHERE value_2 = 7');
INSERT INTO reference_table_ddl (value_2, value_3) VALUES (7, 'bb'); INSERT INTO reference_schema.reference_table_ddl (value_2, value_3) VALUES (7, 'bb');
SELECT master_modify_multiple_shards('DELETE FROM reference_table_ddl'); SELECT master_modify_multiple_shards('DELETE FROM reference_schema.reference_table_ddl');
-- get/update the statistics -- get/update the statistics
SELECT part_storage_type, part_key, part_replica_count, part_max_size, SELECT part_storage_type, part_key, part_replica_count, part_max_size,
part_placement_policy FROM master_get_table_metadata('reference_table_ddl'); part_placement_policy
SELECT shardid AS a_shard_id FROM pg_dist_shard WHERE logicalrelid = 'reference_table_ddl'::regclass \gset FROM master_get_table_metadata('reference_schema.reference_table_ddl');
SELECT shardid AS a_shard_id FROM pg_dist_shard WHERE logicalrelid = 'reference_schema.reference_table_ddl'::regclass \gset
SELECT master_update_shard_statistics(:a_shard_id); SELECT master_update_shard_statistics(:a_shard_id);
CREATE TABLE append_reference_tmp_table (id INT); CREATE TABLE append_reference_tmp_table (id INT);
SELECT master_append_table_to_shard(:a_shard_id, 'append_reference_tmp_table', 'localhost', :master_port); SELECT master_append_table_to_shard(:a_shard_id, 'append_reference_tmp_table', 'localhost', :master_port);
SELECT master_get_table_ddl_events('reference_table_ddl'); SELECT master_get_table_ddl_events('reference_schema.reference_table_ddl');
-- in reality, we wouldn't need to repair any reference table shard placements -- in reality, we wouldn't need to repair any reference table shard placements
-- however, the test could be relevant for other purposes -- however, the test could be relevant for other purposes
@ -1010,5 +1012,5 @@ ROLLBACK;
-- clean up tables -- clean up tables
DROP TABLE reference_table_test, reference_table_test_second, reference_table_test_third, DROP TABLE reference_table_test, reference_table_test_second, reference_table_test_third,
reference_table_test_fourth, reference_table_ddl, reference_table_composite; reference_table_test_fourth, reference_schema.reference_table_ddl, reference_table_composite;
DROP SCHEMA reference_schema CASCADE; DROP SCHEMA reference_schema CASCADE;