-- -- MULTI_APPEND_TABLE_TO_SHARD -- SET citus.next_shard_id TO 230000; -- Initialize tables to join CREATE TABLE multi_append_table_to_shard_right_reference ( right_number INTEGER not null, right_text TEXT not null ); SELECT create_reference_table('multi_append_table_to_shard_right_reference'); create_reference_table ------------------------ (1 row) CREATE TABLE multi_append_table_to_shard_left ( left_number INTEGER not null, left_text TEXT not null ); SELECT create_distributed_table('multi_append_table_to_shard_left', 'left_number', 'append'); create_distributed_table -------------------------- (1 row) CREATE TABLE multi_append_table_to_shard_right_reference_hash ( right_number INTEGER not null, right_text TEXT not null ); SET citus.shard_count TO 1; SET citus.shard_replication_factor TO 1; SELECT create_distributed_table('multi_append_table_to_shard_right_reference_hash', 'right_number', 'hash'); create_distributed_table -------------------------- (1 row) -- Replicate 'left' table on both workers SELECT set_config('citus.shard_replication_factor', '2', false); set_config ------------ 2 (1 row) \copy multi_append_table_to_shard_left FROM '@abs_srcdir@/data/agg.data' \copy multi_append_table_to_shard_left FROM '@abs_srcdir@/data/agg.data' -- Place 'right' table on both workers \copy multi_append_table_to_shard_right_reference FROM '@abs_srcdir@/data/agg.data' -- Reset shard replication factor to ensure tasks will be assigned to both workers SELECT set_config('citus.shard_replication_factor', '2', false); set_config ------------ 2 (1 row) -- All 8 rows in left table match a row in right table SELECT COUNT(*) FROM multi_append_table_to_shard_left, multi_append_table_to_shard_right_reference WHERE left_number = right_number; count ------- 8 (1 row) -- Now append more data to the 'right' table CREATE TABLE multi_append_table_to_shard_stage ( number INTEGER not null, text TEXT not null ); \COPY multi_append_table_to_shard_stage FROM '@abs_srcdir@/data/large_records.data' with delimiter '|'; -- Check that we error out if we try to append data to a hash partitioned table. SELECT master_create_empty_shard('multi_append_table_to_shard_right_reference_hash'); ERROR: relation "multi_append_table_to_shard_right_reference_hash" is a hash partitioned table DETAIL: We currently don't support creating shards on hash-partitioned tables SELECT master_append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) FROM pg_dist_shard WHERE 'multi_append_table_to_shard_right_reference_hash'::regclass::oid = logicalrelid; ERROR: cannot append to shardId 230001 DETAIL: We currently don't support appending to shards in hash-partitioned, reference and local tables -- Clean up after test SELECT master_apply_delete_command('DELETE FROM multi_append_table_to_shard_left'); master_apply_delete_command ----------------------------- 2 (1 row) DROP TABLE multi_append_table_to_shard_stage; DROP TABLE multi_append_table_to_shard_right_reference; DROP TABLE multi_append_table_to_shard_left; -- Check partitioning by date CREATE TABLE multi_append_table_to_shard_date ( event_date DATE, value INT ); SELECT master_create_distributed_table('multi_append_table_to_shard_date', 'event_date', 'append'); master_create_distributed_table --------------------------------- (1 row) -- Create an empty shard and check that we can query the table SELECT master_create_empty_shard('multi_append_table_to_shard_date'); master_create_empty_shard --------------------------- 230004 (1 row) SELECT * FROM multi_append_table_to_shard_date; event_date | value ------------+------- (0 rows) -- Create an empty distributed table and check that we can query it CREATE TABLE multi_append_table_to_shard_stage (LIKE multi_append_table_to_shard_date); SELECT master_append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) FROM pg_dist_shard WHERE 'multi_append_table_to_shard_date'::regclass::oid = logicalrelid; master_append_table_to_shard ------------------------------ 0 (1 row) SELECT * FROM multi_append_table_to_shard_date; event_date | value ------------+------- (0 rows) -- INSERT NULL values and check that we can query the table INSERT INTO multi_append_table_to_shard_stage VALUES (NULL, NULL); SELECT master_append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) FROM pg_dist_shard WHERE 'multi_append_table_to_shard_date'::regclass::oid = logicalrelid; master_append_table_to_shard ------------------------------ 0.00533333 (1 row) SELECT * FROM multi_append_table_to_shard_date; event_date | value ------------+------- | (1 row) -- INSERT regular values and check that we can query the table INSERT INTO multi_append_table_to_shard_stage VALUES ('2016-01-01', 3); SELECT master_append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) FROM pg_dist_shard WHERE 'multi_append_table_to_shard_date'::regclass::oid = logicalrelid; master_append_table_to_shard ------------------------------ 0.00533333 (1 row) SELECT * FROM multi_append_table_to_shard_date; event_date | value ------------+------- | | 01-01-2016 | 3 (3 rows) -- When run inside aborted transaction does not persist changes INSERT INTO multi_append_table_to_shard_stage VALUES ('2016-02-02', 4); BEGIN; SELECT master_append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) FROM pg_dist_shard WHERE 'multi_append_table_to_shard_date'::regclass::oid = logicalrelid; master_append_table_to_shard ------------------------------ 0.00533333 (1 row) ROLLBACK; SELECT * FROM multi_append_table_to_shard_date; event_date | value ------------+------- | | 01-01-2016 | 3 (3 rows) DROP TABLE multi_append_table_to_shard_stage; DROP TABLE multi_append_table_to_shard_date;