setup { CREATE TABLE test_concurrent_dml (test_id integer NOT NULL, data text); SELECT master_create_distributed_table('test_concurrent_dml', 'test_id', 'hash'); SELECT master_create_worker_shards('test_concurrent_dml', 4, 2); } teardown { DROP TABLE IF EXISTS test_concurrent_dml CASCADE; } session "s1" step "s1-begin" { BEGIN; } step "s1-insert" { INSERT INTO test_concurrent_dml VALUES(1); } step "s1-multi-insert" { INSERT INTO test_concurrent_dml VALUES (1), (2); } step "s1-commit" { COMMIT; } session "s2" step "s2-begin" { BEGIN; } step "s2-update" { UPDATE test_concurrent_dml SET data = 'blarg' WHERE test_id = 1; } step "s2-multi-insert-overlap" { INSERT INTO test_concurrent_dml VALUES (1), (4); } step "s2-multi-insert" { INSERT INTO test_concurrent_dml VALUES (3), (4); } step "s2-commit" { COMMIT; } // verify that an in-progress insert blocks concurrent updates permutation "s1-begin" "s1-insert" "s2-update" "s1-commit" // but an insert without xact will not block permutation "s1-insert" "s2-update" // verify that an in-progress multi-row insert blocks concurrent updates permutation "s1-begin" "s1-multi-insert" "s2-update" "s1-commit" // two multi-row inserts that hit same shards will block permutation "s1-begin" "s1-multi-insert" "s2-multi-insert-overlap" "s1-commit" // but concurrent multi-row inserts don't block unless shards overlap permutation "s1-begin" "s2-begin" "s1-multi-insert" "s2-multi-insert" "s1-commit" "s2-commit"