aboutsummaryrefslogtreecommitdiff
path: root/src/test/isolation/specs/vacuum-reltuples.spec
blob: 6d9fa010b3c0ac55a391e914eaa7d1c7fb3ee5d2 (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
43
44
45
46
47
48
# Test for vacuum's handling of reltuples when pages are skipped due
# to page pins. We absolutely need to avoid setting reltuples=0 in
# such cases, since that interferes badly with planning.
#
# Expected result in second permutation is 20 tuples rather than 21 as
# for the others, because vacuum should leave the previous result
# (from before the insert) in place.

setup {
    create table smalltbl
        as select i as id from generate_series(1,20) i;
    alter table smalltbl set (autovacuum_enabled = off);
}
setup {
    vacuum analyze smalltbl;
}

teardown {
    drop table smalltbl;
}

session "worker"
step "open" {
    begin;
    declare c1 cursor for select 1 as dummy from smalltbl;
}
step "fetch1" {
    fetch next from c1;
}
step "close" {
    commit;
}
step "stats" {
    select relpages, reltuples from pg_class
     where oid='smalltbl'::regclass;
}

session "vacuumer"
step "vac" {
    vacuum smalltbl;
}
step "modify" {
    insert into smalltbl select max(id)+1 from smalltbl;
}

permutation "modify" "vac" "stats"
permutation "modify" "open" "fetch1" "vac" "close" "stats"
permutation "modify" "vac" "stats"