-- -- MULTI_MASTER_DELETE_PROTOCOL -- SET citus.next_shard_id TO 320000; -- Create a new range partitioned customer_delete_protocol table and load data into it. CREATE TABLE customer_delete_protocol ( c_custkey integer not null, c_name varchar(25) not null, c_address varchar(40) not null, c_nationkey integer not null, c_phone char(15) not null, c_acctbal decimal(15,2) not null, c_mktsegment char(10) not null, c_comment varchar(117) not null); SELECT master_create_distributed_table('customer_delete_protocol', 'c_custkey', 'append'); master_create_distributed_table --------------------------------- (1 row) \copy customer_delete_protocol FROM '@abs_srcdir@/data/customer.1.data' with delimiter '|' \copy customer_delete_protocol FROM '@abs_srcdir@/data/customer.2.data' with delimiter '|' \copy customer_delete_protocol FROM '@abs_srcdir@/data/customer.3.data' with delimiter '|' -- Testing master_apply_delete_command -- Check that we don't support conditions on columns other than partition key. SELECT master_apply_delete_command('DELETE FROM customer_delete_protocol WHERE c_acctbal > 0.0'); ERROR: cannot delete from distributed table DETAIL: Where clause includes a column other than partition column -- Check that we delete a shard if and only if all rows in the shard satisfy the condition. SELECT master_apply_delete_command('DELETE FROM customer_delete_protocol WHERE c_custkey > 6500'); master_apply_delete_command ----------------------------- 0 (1 row) SELECT count(*) from customer_delete_protocol; count ------- 3000 (1 row) -- Delete one shard that satisfies the given conditions. SELECT master_apply_delete_command('DELETE FROM customer_delete_protocol WHERE c_custkey > 1000 AND c_custkey < 3000'); master_apply_delete_command ----------------------------- 1 (1 row) SELECT count(*) from customer_delete_protocol; count ------- 2000 (1 row) -- Delete all shards if no condition is provided. SELECT master_apply_delete_command('DELETE FROM customer_delete_protocol'); master_apply_delete_command ----------------------------- 2 (1 row) SELECT count(*) FROM customer_delete_protocol; count ------- 0 (1 row) -- Verify that empty shards are deleted if no condition is provided SELECT 1 AS one FROM master_create_empty_shard('customer_delete_protocol'); one ----- 1 (1 row) SELECT master_apply_delete_command('DELETE FROM customer_delete_protocol WHERE c_custkey > 1000'); master_apply_delete_command ----------------------------- 0 (1 row) SELECT master_apply_delete_command('DELETE FROM customer_delete_protocol'); master_apply_delete_command ----------------------------- 1 (1 row) -- Verify that master_apply_delete_command can be called in a transaction block SELECT 1 AS one FROM master_create_empty_shard('customer_delete_protocol'); one ----- 1 (1 row) BEGIN; SELECT master_apply_delete_command('DELETE FROM customer_delete_protocol'); master_apply_delete_command ----------------------------- 1 (1 row) COMMIT;