mirror of https://github.com/citusdata/citus.git
Add udf tests with citus local tables (#4154)
parent
5e5ba46793
commit
9a56c22917
|
@ -485,10 +485,175 @@ NOTICE: executing the command locally: TRUNCATE TABLE citus_local_tables_test_s
|
||||||
-- test vacuum
|
-- test vacuum
|
||||||
VACUUM citus_local_table_1;
|
VACUUM citus_local_table_1;
|
||||||
VACUUM citus_local_table_1, distributed_table, local_table, reference_table;
|
VACUUM citus_local_table_1, distributed_table, local_table, reference_table;
|
||||||
|
-- test drop
|
||||||
DROP TABLE citus_local_table_1, citus_local_table_2, distributed_table, local_table, reference_table;
|
DROP TABLE citus_local_table_1, citus_local_table_2, distributed_table, local_table, reference_table;
|
||||||
NOTICE: executing the command locally: DROP TABLE IF EXISTS citus_local_tables_test_schema.reference_table_xxxxx CASCADE
|
NOTICE: executing the command locally: DROP TABLE IF EXISTS citus_local_tables_test_schema.reference_table_xxxxx CASCADE
|
||||||
NOTICE: executing the command locally: DROP TABLE IF EXISTS citus_local_tables_test_schema.citus_local_table_2_xxxxx CASCADE
|
NOTICE: executing the command locally: DROP TABLE IF EXISTS citus_local_tables_test_schema.citus_local_table_2_xxxxx CASCADE
|
||||||
NOTICE: executing the command locally: DROP TABLE IF EXISTS citus_local_tables_test_schema.citus_local_table_1_xxxxx CASCADE
|
NOTICE: executing the command locally: DROP TABLE IF EXISTS citus_local_tables_test_schema.citus_local_table_1_xxxxx CASCADE
|
||||||
|
-- test some other udf's with citus local tables
|
||||||
|
CREATE TABLE citus_local_table_4(a int);
|
||||||
|
SELECT create_citus_local_table('citus_local_table_4');
|
||||||
|
create_citus_local_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- should work --
|
||||||
|
-- insert some data & create an index for table size udf's
|
||||||
|
INSERT INTO citus_local_table_4 VALUES (1), (2), (3);
|
||||||
|
NOTICE: executing the command locally: INSERT INTO citus_local_tables_test_schema.citus_local_table_4_1504037 AS citus_table_alias (a) VALUES (1), (2), (3)
|
||||||
|
CREATE INDEX citus_local_table_4_idx ON citus_local_table_4(a);
|
||||||
|
NOTICE: executing the command locally: CREATE INDEX citus_local_table_4_idx_1504037 ON citus_local_tables_test_schema.citus_local_table_4_1504037 USING btree (a )
|
||||||
|
SELECT citus_table_size('citus_local_table_4');
|
||||||
|
citus_table_size
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
8192
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT citus_total_relation_size('citus_local_table_4');
|
||||||
|
citus_total_relation_size
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
24576
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT citus_relation_size('citus_local_table_4');
|
||||||
|
citus_relation_size
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
8192
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
SELECT lock_relation_if_exists('citus_local_table_4', 'ACCESS SHARE');
|
||||||
|
lock_relation_if_exists
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT count(*) FROM pg_locks where relation='citus_local_table_4'::regclass;
|
||||||
|
count
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
-- hide first column (relationId) as it might change
|
||||||
|
SELECT part_storage_type, part_method, part_key, part_replica_count, part_max_size, part_placement_policy FROM master_get_table_metadata('citus_local_table_4');
|
||||||
|
part_storage_type | part_method | part_key | part_replica_count | part_max_size | part_placement_policy
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
t | n | | 1 | 1536000 | 2
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT master_get_table_ddl_events('citus_local_table_4');
|
||||||
|
master_get_table_ddl_events
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
CREATE TABLE citus_local_tables_test_schema.citus_local_table_4 (a integer)
|
||||||
|
ALTER TABLE citus_local_tables_test_schema.citus_local_table_4 OWNER TO postgres
|
||||||
|
CREATE INDEX citus_local_table_4_idx ON citus_local_tables_test_schema.citus_local_table_4 USING btree (a)
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
|
SELECT column_to_column_name(logicalrelid, partkey)
|
||||||
|
FROM pg_dist_partition WHERE logicalrelid = 'citus_local_table_4'::regclass;
|
||||||
|
column_to_column_name
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT column_name_to_column('citus_local_table_4', 'a');
|
||||||
|
column_name_to_column
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
{VAR :varno 1 :varattno 1 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnoold 1 :varoattno 1 :location -1}
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SELECT master_update_shard_statistics(shardid)
|
||||||
|
FROM (SELECT shardid FROM pg_dist_shard WHERE logicalrelid='citus_local_table_4'::regclass) as shardid;
|
||||||
|
master_update_shard_statistics
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
8192
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- will always be no-op as we create the shell table from scratch
|
||||||
|
-- while creating a citus local table, but let's see it works
|
||||||
|
SELECT truncate_local_data_after_distributing_table('citus_local_table_4');
|
||||||
|
truncate_local_data_after_distributing_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
SELECT worker_drop_distributed_table('citus_local_table_4');
|
||||||
|
worker_drop_distributed_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- should only see shard relation
|
||||||
|
SELECT tableName FROM pg_catalog.pg_tables WHERE tablename LIKE 'citus_local_table_4%';
|
||||||
|
tablename
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
citus_local_table_4_1504037
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
ROLLBACK;
|
||||||
|
-- should return a single element array that only includes its own shard id
|
||||||
|
SELECT shardid, get_colocated_shard_array(shardid)
|
||||||
|
FROM (SELECT shardid FROM pg_dist_shard WHERE logicalrelid='citus_local_table_4'::regclass) as shardid;
|
||||||
|
shardid | get_colocated_shard_array
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1504037 | {1504037}
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
SELECT master_remove_partition_metadata('citus_local_table_4'::regclass::oid, 'citus_local_tables_test_schema', 'citus_local_table_4');
|
||||||
|
master_remove_partition_metadata
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- should print 0
|
||||||
|
select count(*) from pg_dist_partition where logicalrelid='citus_local_table_4'::regclass;
|
||||||
|
count
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
0
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
ROLLBACK;
|
||||||
|
-- should fail --
|
||||||
|
SELECT upgrade_to_reference_table('citus_local_table_4');
|
||||||
|
ERROR: cannot upgrade to reference table
|
||||||
|
SELECT update_distributed_table_colocation('citus_local_table_4', colocate_with => 'none');
|
||||||
|
ERROR: relation citus_local_table_4 should be a hash distributed table
|
||||||
|
SELECT master_create_worker_shards('citus_local_table_4', 10, 1);
|
||||||
|
ERROR: unsupported table partition type: n
|
||||||
|
SELECT master_create_empty_shard('citus_local_table_4');
|
||||||
|
ERROR: relation "citus_local_table_4" is a citus local table
|
||||||
|
SELECT master_apply_delete_command('DELETE FROM citus_local_table_4');
|
||||||
|
ERROR: cannot delete from table
|
||||||
|
CREATE TABLE postgres_local_table (a int);
|
||||||
|
SELECT master_append_table_to_shard(shardId, 'postgres_local_table', 'localhost', :master_port)
|
||||||
|
FROM (SELECT shardid FROM pg_dist_shard WHERE logicalrelid='citus_local_table_4'::regclass) as shardid;
|
||||||
|
ERROR: cannot append to shardId 1504037
|
||||||
|
-- return true
|
||||||
|
SELECT citus_table_is_visible('citus_local_table_4'::regclass::oid);
|
||||||
|
citus_table_is_visible
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- return false
|
||||||
|
SELECT relation_is_a_known_shard('citus_local_table_4');
|
||||||
|
relation_is_a_known_shard
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
f
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- return | false | true |
|
||||||
|
SELECT citus_table_is_visible(tableName::regclass::oid), relation_is_a_known_shard(tableName::regclass)
|
||||||
|
FROM (SELECT tableName FROM pg_catalog.pg_tables WHERE tablename LIKE 'citus_local_table_4_%') as tableName;
|
||||||
|
citus_table_is_visible | relation_is_a_known_shard
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
f | t
|
||||||
|
(1 row)
|
||||||
|
|
||||||
-- cleanup at exit
|
-- cleanup at exit
|
||||||
DROP SCHEMA citus_local_tables_test_schema, "CiTUS!LocalTables" CASCADE;
|
DROP SCHEMA citus_local_tables_test_schema, "CiTUS!LocalTables" CASCADE;
|
||||||
NOTICE: drop cascades to 15 other objects
|
NOTICE: drop cascades to 18 other objects
|
||||||
|
|
|
@ -188,7 +188,26 @@ SELECT * FROM citus_local_table_3;
|
||||||
-- finally show that we do not allow defining foreign key in mx nodes
|
-- finally show that we do not allow defining foreign key in mx nodes
|
||||||
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local_2 FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1);
|
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local_2 FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1);
|
||||||
ERROR: operation is not allowed on this node
|
ERROR: operation is not allowed on this node
|
||||||
-- cleanup at exit
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
|
SET search_path TO citus_local_tables_mx;
|
||||||
|
SELECT master_remove_distributed_table_metadata_from_workers('citus_local_table_4'::regclass::oid, 'citus_local_tables_mx', 'citus_local_table_4');
|
||||||
|
master_remove_distributed_table_metadata_from_workers
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- both workers should print 0 as master_remove_distributed_table_metadata_from_workers
|
||||||
|
-- drops the table as well
|
||||||
|
SELECT run_command_on_workers(
|
||||||
|
$$
|
||||||
|
SELECT count(*) FROM pg_catalog.pg_tables WHERE tablename='citus_local_table_4'
|
||||||
|
$$);
|
||||||
|
run_command_on_workers
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
(localhost,57637,t,0)
|
||||||
|
(localhost,57638,t,0)
|
||||||
|
(2 rows)
|
||||||
|
|
||||||
|
-- cleanup at exit
|
||||||
DROP SCHEMA citus_local_tables_mx CASCADE;
|
DROP SCHEMA citus_local_tables_mx CASCADE;
|
||||||
NOTICE: drop cascades to 17 other objects
|
NOTICE: drop cascades to 17 other objects
|
||||||
|
|
|
@ -362,7 +362,85 @@ TRUNCATE citus_local_table_1, citus_local_table_2, distributed_table, local_tabl
|
||||||
VACUUM citus_local_table_1;
|
VACUUM citus_local_table_1;
|
||||||
VACUUM citus_local_table_1, distributed_table, local_table, reference_table;
|
VACUUM citus_local_table_1, distributed_table, local_table, reference_table;
|
||||||
|
|
||||||
|
-- test drop
|
||||||
DROP TABLE citus_local_table_1, citus_local_table_2, distributed_table, local_table, reference_table;
|
DROP TABLE citus_local_table_1, citus_local_table_2, distributed_table, local_table, reference_table;
|
||||||
|
|
||||||
|
-- test some other udf's with citus local tables
|
||||||
|
|
||||||
|
CREATE TABLE citus_local_table_4(a int);
|
||||||
|
SELECT create_citus_local_table('citus_local_table_4');
|
||||||
|
|
||||||
|
-- should work --
|
||||||
|
|
||||||
|
-- insert some data & create an index for table size udf's
|
||||||
|
INSERT INTO citus_local_table_4 VALUES (1), (2), (3);
|
||||||
|
CREATE INDEX citus_local_table_4_idx ON citus_local_table_4(a);
|
||||||
|
|
||||||
|
SELECT citus_table_size('citus_local_table_4');
|
||||||
|
SELECT citus_total_relation_size('citus_local_table_4');
|
||||||
|
SELECT citus_relation_size('citus_local_table_4');
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
SELECT lock_relation_if_exists('citus_local_table_4', 'ACCESS SHARE');
|
||||||
|
SELECT count(*) FROM pg_locks where relation='citus_local_table_4'::regclass;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
-- hide first column (relationId) as it might change
|
||||||
|
SELECT part_storage_type, part_method, part_key, part_replica_count, part_max_size, part_placement_policy FROM master_get_table_metadata('citus_local_table_4');
|
||||||
|
SELECT master_get_table_ddl_events('citus_local_table_4');
|
||||||
|
|
||||||
|
SELECT column_to_column_name(logicalrelid, partkey)
|
||||||
|
FROM pg_dist_partition WHERE logicalrelid = 'citus_local_table_4'::regclass;
|
||||||
|
|
||||||
|
SELECT column_name_to_column('citus_local_table_4', 'a');
|
||||||
|
|
||||||
|
SELECT master_update_shard_statistics(shardid)
|
||||||
|
FROM (SELECT shardid FROM pg_dist_shard WHERE logicalrelid='citus_local_table_4'::regclass) as shardid;
|
||||||
|
|
||||||
|
-- will always be no-op as we create the shell table from scratch
|
||||||
|
-- while creating a citus local table, but let's see it works
|
||||||
|
SELECT truncate_local_data_after_distributing_table('citus_local_table_4');
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
SELECT worker_drop_distributed_table('citus_local_table_4');
|
||||||
|
|
||||||
|
-- should only see shard relation
|
||||||
|
SELECT tableName FROM pg_catalog.pg_tables WHERE tablename LIKE 'citus_local_table_4%';
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
-- should return a single element array that only includes its own shard id
|
||||||
|
SELECT shardid, get_colocated_shard_array(shardid)
|
||||||
|
FROM (SELECT shardid FROM pg_dist_shard WHERE logicalrelid='citus_local_table_4'::regclass) as shardid;
|
||||||
|
|
||||||
|
BEGIN;
|
||||||
|
SELECT master_remove_partition_metadata('citus_local_table_4'::regclass::oid, 'citus_local_tables_test_schema', 'citus_local_table_4');
|
||||||
|
|
||||||
|
-- should print 0
|
||||||
|
select count(*) from pg_dist_partition where logicalrelid='citus_local_table_4'::regclass;
|
||||||
|
ROLLBACK;
|
||||||
|
|
||||||
|
-- should fail --
|
||||||
|
|
||||||
|
SELECT upgrade_to_reference_table('citus_local_table_4');
|
||||||
|
SELECT update_distributed_table_colocation('citus_local_table_4', colocate_with => 'none');
|
||||||
|
|
||||||
|
SELECT master_create_worker_shards('citus_local_table_4', 10, 1);
|
||||||
|
SELECT master_create_empty_shard('citus_local_table_4');
|
||||||
|
SELECT master_apply_delete_command('DELETE FROM citus_local_table_4');
|
||||||
|
|
||||||
|
CREATE TABLE postgres_local_table (a int);
|
||||||
|
SELECT master_append_table_to_shard(shardId, 'postgres_local_table', 'localhost', :master_port)
|
||||||
|
FROM (SELECT shardid FROM pg_dist_shard WHERE logicalrelid='citus_local_table_4'::regclass) as shardid;
|
||||||
|
|
||||||
|
-- return true
|
||||||
|
SELECT citus_table_is_visible('citus_local_table_4'::regclass::oid);
|
||||||
|
|
||||||
|
-- return false
|
||||||
|
SELECT relation_is_a_known_shard('citus_local_table_4');
|
||||||
|
|
||||||
|
-- return | false | true |
|
||||||
|
SELECT citus_table_is_visible(tableName::regclass::oid), relation_is_a_known_shard(tableName::regclass)
|
||||||
|
FROM (SELECT tableName FROM pg_catalog.pg_tables WHERE tablename LIKE 'citus_local_table_4_%') as tableName;
|
||||||
|
|
||||||
-- cleanup at exit
|
-- cleanup at exit
|
||||||
DROP SCHEMA citus_local_tables_test_schema, "CiTUS!LocalTables" CASCADE;
|
DROP SCHEMA citus_local_tables_test_schema, "CiTUS!LocalTables" CASCADE;
|
||||||
|
|
|
@ -143,6 +143,17 @@ SELECT * FROM citus_local_table_3;
|
||||||
-- finally show that we do not allow defining foreign key in mx nodes
|
-- finally show that we do not allow defining foreign key in mx nodes
|
||||||
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local_2 FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1);
|
ALTER TABLE citus_local_table_3 ADD CONSTRAINT fkey_local_to_local_2 FOREIGN KEY(l1) REFERENCES citus_local_table_4(l1);
|
||||||
|
|
||||||
-- cleanup at exit
|
|
||||||
\c - - - :master_port
|
\c - - - :master_port
|
||||||
|
SET search_path TO citus_local_tables_mx;
|
||||||
|
|
||||||
|
SELECT master_remove_distributed_table_metadata_from_workers('citus_local_table_4'::regclass::oid, 'citus_local_tables_mx', 'citus_local_table_4');
|
||||||
|
|
||||||
|
-- both workers should print 0 as master_remove_distributed_table_metadata_from_workers
|
||||||
|
-- drops the table as well
|
||||||
|
SELECT run_command_on_workers(
|
||||||
|
$$
|
||||||
|
SELECT count(*) FROM pg_catalog.pg_tables WHERE tablename='citus_local_table_4'
|
||||||
|
$$);
|
||||||
|
|
||||||
|
-- cleanup at exit
|
||||||
DROP SCHEMA citus_local_tables_mx CASCADE;
|
DROP SCHEMA citus_local_tables_mx CASCADE;
|
||||||
|
|
Loading…
Reference in New Issue