summaryrefslogtreecommitdiffstats
path: root/src/test/isolation/specs/vacuum-reltuples.spec
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/isolation/specs/vacuum-reltuples.spec')
-rw-r--r--src/test/isolation/specs/vacuum-reltuples.spec48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/test/isolation/specs/vacuum-reltuples.spec b/src/test/isolation/specs/vacuum-reltuples.spec
new file mode 100644
index 0000000..ae2f79b
--- /dev/null
+++ b/src/test/isolation/specs/vacuum-reltuples.spec
@@ -0,0 +1,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