diff --git a/src/backend/columnar/columnar_customscan.c b/src/backend/columnar/columnar_customscan.c index 88760c654..763625053 100644 --- a/src/backend/columnar/columnar_customscan.c +++ b/src/backend/columnar/columnar_customscan.c @@ -395,12 +395,15 @@ ColumnarAttrNeeded(ScanState *ss) elog(DEBUG1, "Need attribute: all"); /* all attributes are required, we don't need to add more so break*/ - attr_needed = bms_add_range(attr_needed, 0, natts - 1); + attr_needed = bms_add_range(attr_needed, + 1 - FirstLowInvalidHeapAttributeNumber, + natts - FirstLowInvalidHeapAttributeNumber); break; } elog(DEBUG1, "Need attribute: %d", var->varattno); - attr_needed = bms_add_member(attr_needed, var->varattno - 1); + attr_needed = bms_add_member(attr_needed, + var->varattno - FirstLowInvalidHeapAttributeNumber); } return attr_needed; diff --git a/src/backend/columnar/columnar_tableam.c b/src/backend/columnar/columnar_tableam.c index 0e2099fb5..804e22512 100644 --- a/src/backend/columnar/columnar_tableam.c +++ b/src/backend/columnar/columnar_tableam.c @@ -146,7 +146,8 @@ columnar_beginscan(Relation relation, Snapshot snapshot, int natts = relation->rd_att->natts; /* attr_needed represents 0-indexed attribute numbers */ - Bitmapset *attr_needed = bms_add_range(NULL, 0, natts - 1); + Bitmapset *attr_needed = bms_add_range(NULL, 1 - FirstLowInvalidHeapAttributeNumber, + natts - FirstLowInvalidHeapAttributeNumber); /* the columnar access method does not use the flags, they are specific to heap */ flags = 0; @@ -436,7 +437,10 @@ columnar_index_fetch_tuple(struct IndexFetchTableData *scan, /* we need all columns */ int natts = scan->rel->rd_att->natts; - Bitmapset *attr_needed = bms_add_range(NULL, 0, natts - 1); + Bitmapset *attr_needed = bms_add_range(NULL, 1 - FirstLowInvalidHeapAttributeNumber, + natts - FirstLowInvalidHeapAttributeNumber); + + TupleDesc relationTupleDesc = RelationGetDescr(scan->rel); List *relationColumnList = NeededColumnsList(relationTupleDesc, attr_needed); uint64 rowNumber = tid_to_row_number(*tid); @@ -728,7 +732,8 @@ columnar_relation_copy_for_cluster(Relation OldHeap, Relation NewHeap, /* we need all columns */ int natts = OldHeap->rd_att->natts; - Bitmapset *attr_needed = bms_add_range(NULL, 0, natts - 1); + Bitmapset *attr_needed = bms_add_range(NULL, 1 - FirstLowInvalidHeapAttributeNumber, + natts - FirstLowInvalidHeapAttributeNumber); List *projectedColumnList = NeededColumnsList(sourceDesc, attr_needed); ColumnarReadState *readState = ColumnarBeginRead(OldHeap, sourceDesc, projectedColumnList, @@ -770,9 +775,9 @@ NeededColumnsList(TupleDesc tupdesc, Bitmapset *attr_needed) } /* attr_needed is 0-indexed but columnList is 1-indexed */ - if (bms_is_member(i, attr_needed)) + AttrNumber varattno = tupdesc->attrs[i].attnum; + if (bms_is_member(varattno - FirstLowInvalidHeapAttributeNumber, attr_needed)) { - AttrNumber varattno = i + 1; columnList = lappend_int(columnList, varattno); } }