summaryrefslogtreecommitdiff
path: root/src/test/isolation/specs/sequence-ddl.spec
blob: a04fd1cc7e8cb1d9fbcc26f1d0d57d7c7ea8ad7e (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
39
40
41
42
# Test sequence usage and concurrent sequence DDL

setup
{
    CREATE SEQUENCE seq1;
}

teardown
{
    DROP SEQUENCE seq1;
}

session "s1"
setup           { BEGIN; }
step "s1alter"  { ALTER SEQUENCE seq1 MAXVALUE 10; }
step "s1alter2" { ALTER SEQUENCE seq1 MAXVALUE 20; }
step "s1restart" { ALTER SEQUENCE seq1 RESTART WITH 5; }
step "s1setval" { SELECT setval('seq1', 5); }
step "s1commit" { COMMIT; }

session "s2"
step "s2begin"  { BEGIN; }
step "s2nv"     { SELECT nextval('seq1') FROM generate_series(1, 15); }
step "s2commit" { COMMIT; }

permutation "s1alter" "s1commit" "s2nv"

# Prior to PG10, the s2nv step would see the uncommitted s1alter
# change, but now it waits.
permutation "s1alter" "s2nv" "s1commit"

# Prior to PG10, the s2nv step would see the uncommitted s1restart
# change, but now it waits.
permutation "s1restart" "s2nv" "s1commit"

# In contrast to ALTER setval() is non-transactional, so it doesn't
# have to wait.
permutation "s1restart" "s2nv" "s1commit"

# nextval doesn't release lock until transaction end, so s1alter2 has
# to wait for s2commit.
permutation "s2begin" "s2nv" "s1alter2" "s2commit" "s1commit"