-- =================================================================== -- test composite type, varchar and enum types -- create, distribute, INSERT, SELECT and UPDATE -- =================================================================== -- create a custom type... CREATE TYPE test_composite_type AS ( i integer, i2 integer ); -- ... as well as a function to use as its comparator... CREATE FUNCTION equal_test_composite_type_function(test_composite_type, test_composite_type) RETURNS boolean AS 'select $1.i = $2.i AND $1.i2 = $2.i2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; -- ... use that function to create a custom equality operator... CREATE OPERATOR = ( LEFTARG = test_composite_type, RIGHTARG = test_composite_type, PROCEDURE = equal_test_composite_type_function, HASHES ); -- ... and create a custom operator family for hash indexes... CREATE OPERATOR FAMILY cats_op_fam USING hash; -- ... create a test HASH function. Though it is a poor hash function, -- it is acceptable for our tests CREATE FUNCTION test_composite_type_hash(test_composite_type) RETURNS int AS 'SELECT hashtext( ($1.i + $1.i2)::text);' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; -- We need to define two different operator classes for the composite types -- One uses BTREE the other uses HASH CREATE OPERATOR CLASS cats_op_fam_clas3 DEFAULT FOR TYPE test_composite_type USING BTREE AS OPERATOR 3 = (test_composite_type, test_composite_type); CREATE OPERATOR CLASS cats_op_fam_class DEFAULT FOR TYPE test_composite_type USING HASH AS OPERATOR 1 = (test_composite_type, test_composite_type), FUNCTION 1 test_composite_type_hash(test_composite_type); -- create and distribute a table on composite type column CREATE TABLE composite_type_partitioned_table ( id integer, col test_composite_type ); SELECT master_create_distributed_table('composite_type_partitioned_table', 'col'); -- squelch noisy warnings when creating shards \set VERBOSITY terse SELECT master_create_worker_shards('composite_type_partitioned_table', 4, 1); \set VERBOSITY default -- execute INSERT, SELECT and UPDATE queries on composite_type_partitioned_table INSERT INTO composite_type_partitioned_table VALUES (1, '(1, 2)'::test_composite_type); INSERT INTO composite_type_partitioned_table VALUES (2, '(3, 4)'::test_composite_type); INSERT INTO composite_type_partitioned_table VALUES (3, '(5, 6)'::test_composite_type); INSERT INTO composite_type_partitioned_table VALUES (4, '(7, 8)'::test_composite_type); INSERT INTO composite_type_partitioned_table VALUES (5, '(9, 10)'::test_composite_type); SELECT * FROM composite_type_partitioned_table WHERE col = '(7, 8)'::test_composite_type; UPDATE composite_type_partitioned_table SET id = 6 WHERE col = '(7, 8)'::test_composite_type; SELECT * FROM composite_type_partitioned_table WHERE col = '(7, 8)'::test_composite_type; -- create and distribute a table on enum type column CREATE TYPE bug_status AS ENUM ('new', 'open', 'closed'); CREATE TABLE bugs ( id integer, status bug_status ); SELECT master_create_distributed_table('bugs', 'status'); -- squelch noisy warnings when creating shards \set VERBOSITY terse SELECT master_create_worker_shards('bugs', 4, 1); \set VERBOSITY default -- execute INSERT, SELECT and UPDATE queries on composite_type_partitioned_table INSERT INTO bugs VALUES (1, 'new'); INSERT INTO bugs VALUES (2, 'open'); INSERT INTO bugs VALUES (3, 'closed'); INSERT INTO bugs VALUES (4, 'closed'); INSERT INTO bugs VALUES (5, 'open'); SELECT * FROM bugs WHERE status = 'closed'::bug_status; UPDATE bugs SET status = 'closed'::bug_status WHERE id = 2; SELECT * FROM bugs WHERE status = 'open'::bug_status; -- create and distribute a table on varchar column CREATE TABLE varchar_partitioned_table ( id int, name varchar ); SELECT master_create_distributed_table('varchar_partitioned_table', 'c1'); SELECT master_create_worker_shards('varchar_partitioned_table', 4, 1); -- execute INSERT, SELECT and UPDATE queries on composite_type_partitioned_table INSERT INTO varchar_partitioned_table VALUES (1, 'Jason'); INSERT INTO varchar_partitioned_table VALUES (2, 'Ozgun'); INSERT INTO varchar_partitioned_table VALUES (3, 'Onder'); INSERT INTO varchar_partitioned_table VALUES (4, 'Sumedh'); INSERT INTO varchar_partitioned_table VALUES (5, 'Marco'); SELECT * FROM varchar_partitioned_table WHERE name = 'Onder'; UPDATE varchar_partitioned_table SET name = 'Samay' WHERE id = 5; SELECT * FROM varchar_partitioned_table WHERE name = 'Samay';