diff options
Diffstat (limited to 'src/backend/storage/buffer/bufmgr.c')
-rw-r--r-- | src/backend/storage/buffer/bufmgr.c | 43 |
1 files changed, 16 insertions, 27 deletions
diff --git a/src/backend/storage/buffer/bufmgr.c b/src/backend/storage/buffer/bufmgr.c index 08ebabfe96a..16de918e2e1 100644 --- a/src/backend/storage/buffer/bufmgr.c +++ b/src/backend/storage/buffer/bufmgr.c @@ -2934,37 +2934,26 @@ FlushBuffer(BufferDesc *buf, SMgrRelation reln) BlockNumber RelationGetNumberOfBlocksInFork(Relation relation, ForkNumber forkNum) { - switch (relation->rd_rel->relkind) + if (RELKIND_HAS_TABLE_AM(relation->rd_rel->relkind)) { - case RELKIND_SEQUENCE: - case RELKIND_INDEX: - return smgrnblocks(RelationGetSmgr(relation), forkNum); - - case RELKIND_RELATION: - case RELKIND_TOASTVALUE: - case RELKIND_MATVIEW: - { - /* - * Not every table AM uses BLCKSZ wide fixed size blocks. - * Therefore tableam returns the size in bytes - but for the - * purpose of this routine, we want the number of blocks. - * Therefore divide, rounding up. - */ - uint64 szbytes; + /* + * Not every table AM uses BLCKSZ wide fixed size blocks. + * Therefore tableam returns the size in bytes - but for the + * purpose of this routine, we want the number of blocks. + * Therefore divide, rounding up. + */ + uint64 szbytes; - szbytes = table_relation_size(relation, forkNum); + szbytes = table_relation_size(relation, forkNum); - return (szbytes + (BLCKSZ - 1)) / BLCKSZ; - } - case RELKIND_VIEW: - case RELKIND_COMPOSITE_TYPE: - case RELKIND_FOREIGN_TABLE: - case RELKIND_PARTITIONED_INDEX: - case RELKIND_PARTITIONED_TABLE: - default: - Assert(false); - break; + return (szbytes + (BLCKSZ - 1)) / BLCKSZ; + } + else if (RELKIND_HAS_STORAGE(relation->rd_rel->relkind)) + { + return smgrnblocks(RelationGetSmgr(relation), forkNum); } + else + Assert(false); return 0; /* keep compiler quiet */ } |