summaryrefslogtreecommitdiffstats
path: root/src/test/modules/snapshot_too_old/specs/sto_using_cursor.spec
blob: f3677a8fa94bce468e4c2468c366522c8f876b8f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# This test provokes a "snapshot too old" error using a cursor.
#
# The sleep is needed because with a threshold of zero a statement could error
# on changes it made.  With more normal settings no external delay is needed,
# but we don't want these tests to run long enough to see that, since
# granularity is in minutes.
#
# Since results depend on the value of old_snapshot_threshold, sneak that into
# the line generated by the sleep, so that a surprising value isn't so hard
# to identify.

setup
{
    CREATE TABLE sto1 (c int NOT NULL);
    INSERT INTO sto1 SELECT generate_series(1, 1000);
}
setup
{
    VACUUM ANALYZE sto1;
}

teardown
{
    DROP TABLE sto1;
}

session "s1"
setup			{ BEGIN ISOLATION LEVEL REPEATABLE READ; }
step "s1decl"	{ DECLARE cursor1 CURSOR FOR SELECT c FROM sto1; }
step "s1f1"		{ FETCH FIRST FROM cursor1; }
step "s1sleep"	{ SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; }
step "s1f2"		{ FETCH FIRST FROM cursor1; }
teardown		{ COMMIT; }

session "s2"
step "s2u"		{ UPDATE sto1 SET c = 1001 WHERE c = 1; }

permutation "s1decl" "s1f1" "s1sleep" "s2u" "s1f2"