From 5e75d1ac316c445527ae9f1767a448aad63556b5 Mon Sep 17 00:00:00 2001 From: chenze Date: Fri, 21 Apr 2023 18:01:32 +0800 Subject: [PATCH] enable vacuum refresh relallvisible flag for partition table --- .../storage/access/heap/visibilitymap.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/gausskernel/storage/access/heap/visibilitymap.cpp b/src/gausskernel/storage/access/heap/visibilitymap.cpp index e50f73d3a..f5c1a66d4 100644 --- a/src/gausskernel/storage/access/heap/visibilitymap.cpp +++ b/src/gausskernel/storage/access/heap/visibilitymap.cpp @@ -96,6 +96,7 @@ #include "utils/inval.h" #include "commands/tablespace.h" #include "catalog/pg_hashbucket_fn.h" +#include "catalog/pg_partition_fn.h" #include "utils/syscache.h" /* table for fast counting of set bits */ static const uint8 number_of_ones[256] = { @@ -373,6 +374,22 @@ BlockNumber visibilitymap_count(Relation rel, Partition part) result += visibilitymap_count_heap(buckRel); bucketCloseRelation(buckRel); } + } else if (RelationIsPartitioned(rel) && PointerIsValid(part)) { + Relation partRel = partitionGetRelation(rel, part); + if (RelationIsSubPartitioned(rel) && PartitionIsTablePartition(part)) { + List *subPartList = relationGetPartitionList(partRel, NoLock); + ListCell *lc = NULL; + foreach (lc, subPartList) { + Partition subPart = (Partition)lfirst(lc); + Relation subPartRel = partitionGetRelation(rel, subPart); + result += visibilitymap_count_heap(subPartRel); + releaseDummyRelation(&subPartRel); + } + releasePartitionList(partRel, &subPartList, NoLock); + } else { + result = visibilitymap_count_heap(partRel); + } + releaseDummyRelation(&partRel); } else { result = visibilitymap_count_heap(rel); }