-- -- MULTI_APPEND_TABLE_TO_SHARD -- -- Initialize tables to join CREATE TABLE multi_append_table_to_shard_right ( right_number INTEGER not null, right_text TEXT not null ); SELECT create_distributed_table('multi_append_table_to_shard_right', 'right_number', 'append'); create_distributed_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) -- Replicate 'left' table on both workers SELECT set_config('citus.shard_replication_factor', '2', false); set_config ------------ 2 (1 row) \STAGE multi_append_table_to_shard_left FROM '@abs_srcdir@/data/agg.data' \STAGE multi_append_table_to_shard_left FROM '@abs_srcdir@/data/agg.data' -- Place 'right' table only on the primary worker SELECT set_config('citus.shard_replication_factor', '1', false); set_config ------------ 1 (1 row) \STAGE multi_append_table_to_shard_right 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 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/agg.data'; SELECT append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) FROM pg_dist_shard WHERE 'multi_append_table_to_shard_right'::regclass::oid = logicalrelid; append_table_to_shard ----------------------- 0.0533333 (1 row) -- Only the primary worker will see the new matches, as the secondary still uses a cached shard SELECT COUNT(*) FROM multi_append_table_to_shard_left, multi_append_table_to_shard_right WHERE left_number = right_number; count ------- 12 (1 row) -- Now add a lot of data to ensure we increase the size on disk DELETE FROM multi_append_table_to_shard_stage; COPY multi_append_table_to_shard_stage FROM '@abs_srcdir@/data/large_records.data' with delimiter '|'; SELECT append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) FROM pg_dist_shard WHERE 'multi_append_table_to_shard_right'::regclass::oid = logicalrelid; append_table_to_shard ----------------------- 0.106667 (1 row) -- This join will refresh the shard on the secondary, all 8 rows in the left table will match twice (16) SELECT COUNT(*) FROM multi_append_table_to_shard_left, multi_append_table_to_shard_right WHERE left_number = right_number; count ------- 16 (1 row) -- Check that we error out if we try to append data to a hash partitioned table. UPDATE pg_dist_partition SET partmethod = 'h' WHERE logicalrelid = 'multi_append_table_to_shard_right'::regclass::oid; SELECT create_empty_shard('multi_append_table_to_shard_right'); ERROR: relation "multi_append_table_to_shard_right" is a hash partitioned table DETAIL: We currently don't support creating shards on hash-partitioned tables SELECT append_table_to_shard(shardid, 'multi_append_table_to_shard_stage', 'localhost', 57636) FROM pg_dist_shard WHERE 'multi_append_table_to_shard_right'::regclass::oid = logicalrelid; ERROR: cannot append to shardId 103013 DETAIL: We currently don't support appending to shards in hash-partitioned tables UPDATE pg_dist_partition SET partmethod = 'a' WHERE logicalrelid = 'multi_append_table_to_shard_right'::regclass::oid; -- Clean up after test SELECT apply_delete_command('DELETE FROM multi_append_table_to_shard_right'); apply_delete_command ---------------------- 1 (1 row) SELECT apply_delete_command('DELETE FROM multi_append_table_to_shard_left'); apply_delete_command ---------------------- 2 (1 row) DROP TABLE multi_append_table_to_shard_stage; DROP TABLE multi_append_table_to_shard_right; DROP TABLE multi_append_table_to_shard_left;