38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
# This test provokes a "snapshot too old" error using SELECT statements.
|
|
#
|
|
# 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 "s1f1" { SELECT c FROM sto1 ORDER BY c LIMIT 1; }
|
|
step "s1sleep" { SELECT setting, pg_sleep(6) FROM pg_settings WHERE name = 'old_snapshot_threshold'; }
|
|
step "s1f2" { SELECT c FROM sto1 ORDER BY c LIMIT 1; }
|
|
teardown { COMMIT; }
|
|
|
|
session "s2"
|
|
step "s2u" { UPDATE sto1 SET c = 1001 WHERE c = 1; }
|
|
|
|
permutation "s1f1" "s1sleep" "s2u" "s1f2"
|