postgresql/contrib/test_decoding/specs/snapshot_transfer.spec
Andres Freund ef493055b6 Force synchronous commit to be enabled for all test_decoding tests.
Without that the tests fail when forced to be run against a cluster
with synchronous_commit = off (as the WAL might not yet be flushed to
disk by the point logical decoding gets called, and thus the expected
output breaks). Most tests already do that, add it to a few newer tests.

Author: Andres Freund
2018-10-10 13:53:02 -07:00

45 lines
1.9 KiB
RPMSpec

# Test snapshot transfer from subxact to top-level and receival of later snaps.
setup
{
SELECT 'init' FROM pg_create_logical_replication_slot('isolation_slot', 'test_decoding'); -- must be first write in xact
DROP TABLE IF EXISTS dummy;
CREATE TABLE dummy(i int);
DROP TABLE IF EXISTS harvest;
CREATE TABLE harvest(apples int, pears int);
}
teardown
{
DROP TABLE IF EXISTS harvest;
DROP TABLE IF EXISTS dummy;
SELECT 'stop' FROM pg_drop_replication_slot('isolation_slot');
}
session "s0"
setup { SET synchronous_commit=on; }
step "s0_begin" { BEGIN; }
step "s0_begin_sub0" { SAVEPOINT s0; }
step "s0_log_assignment" { SELECT txid_current() IS NULL; }
step "s0_begin_sub1" { SAVEPOINT s1; }
step "s0_sub_get_base_snap" { INSERT INTO dummy VALUES (0); }
step "s0_insert" { INSERT INTO harvest VALUES (1, 2, 3); }
step "s0_end_sub0" { RELEASE SAVEPOINT s0; }
step "s0_end_sub1" { RELEASE SAVEPOINT s1; }
step "s0_insert2" { INSERT INTO harvest VALUES (1, 2, 3, 4); }
step "s0_commit" { COMMIT; }
step "s0_get_changes" { SELECT data FROM pg_logical_slot_get_changes('isolation_slot', NULL, NULL, 'include-xids', '0', 'skip-empty-xacts', '1'); }
session "s1"
setup { SET synchronous_commit=on; }
step "s1_produce_new_snap" { ALTER TABLE harvest ADD COLUMN mangos int; }
# start top-level without base snap, get base snap in subxact, then create new
# snap and make sure it is queued.
permutation "s0_begin" "s0_begin_sub0" "s0_log_assignment" "s0_sub_get_base_snap" "s1_produce_new_snap" "s0_insert" "s0_end_sub0" "s0_commit" "s0_get_changes"
# In previous test, we firstly associated subxact with xact and only then got
# base snap; now nest one more subxact to get snap first and only then (at
# commit) associate it with toplevel.
permutation "s0_begin" "s0_begin_sub0" "s0_log_assignment" "s0_begin_sub1" "s0_sub_get_base_snap" "s1_produce_new_snap" "s0_insert" "s0_end_sub1" "s0_end_sub0" "s0_commit" "s0_get_changes"