diff --git a/src/test/isolation/expected/bru-trigger.out b/src/test/isolation/expected/bru-trigger.out new file mode 100644 index 0000000000..edae1c5832 --- /dev/null +++ b/src/test/isolation/expected/bru-trigger.out @@ -0,0 +1,8 @@ +Parsed test spec with 2 sessions + +starting permutation: s1b s1u s2u s1c +step s1b: BEGIN; +step s1u: UPDATE bruttest SET cnt = cnt + 1; +step s2u: UPDATE bruttest SET cnt = cnt + 1; +step s1c: COMMIT; +step s2u: <... completed> diff --git a/src/test/isolation/specs/bru-trigger.spec b/src/test/isolation/specs/bru-trigger.spec new file mode 100644 index 0000000000..9d49b25174 --- /dev/null +++ b/src/test/isolation/specs/bru-trigger.spec @@ -0,0 +1,32 @@ +# Before Row Update Trigger test +# +# Test concurrent access to a row in a new buffer from within BEFORE UPDATE trigger + +setup +{ + CREATE TABLE bruttest(cnt INTEGER DEFAULT 0, t TEXT); + ALTER TABLE bruttest ALTER COLUMN t SET STORAGE plain; + CREATE FUNCTION noop_tfunc() RETURNS TRIGGER LANGUAGE plpgsql AS $body$ + BEGIN + RETURN NEW; + END + $body$; + CREATE TRIGGER brupdate_trigger BEFORE UPDATE ON bruttest FOR EACH ROW EXECUTE FUNCTION noop_tfunc(); + INSERT INTO bruttest(t) VALUES (repeat('x', 5000)); +} + +teardown +{ + DROP TABLE bruttest; + DROP FUNCTION noop_tfunc(); +} + +session s1 +step s1b { BEGIN; } +step s1u { UPDATE bruttest SET cnt = cnt + 1; } +step s1c { COMMIT; } + +session s2 +step s2u { UPDATE bruttest SET cnt = cnt + 1; } + +permutation s1b s1u s2u s1c