diff --git a/src/backend/distributed/metadata/metadata_cache.c b/src/backend/distributed/metadata/metadata_cache.c index 7b9869118..789601d44 100644 --- a/src/backend/distributed/metadata/metadata_cache.c +++ b/src/backend/distributed/metadata/metadata_cache.c @@ -3971,23 +3971,19 @@ CitusTableTypeIdList(CitusTableType citusTableType) HeapTuple heapTuple = systable_getnext(scanDescriptor); while (HeapTupleIsValid(heapTuple)) { - bool isNull = false; + bool isNullArray[Natts_pg_dist_partition]; + Datum datumArray[Natts_pg_dist_partition]; + heap_deform_tuple(heapTuple, tupleDescriptor, datumArray, isNullArray); - Datum partMethodDatum = - heap_getattr(heapTuple, Anum_pg_dist_partition_partmethod, - tupleDescriptor, &isNull); - Datum replicationModelDatum = - heap_getattr(heapTuple, Anum_pg_dist_partition_repmodel, - tupleDescriptor, &isNull); + Datum partMethodDatum = datumArray[Anum_pg_dist_partition_partmethod - 1]; + Datum replicationModelDatum = datumArray[Anum_pg_dist_partition_repmodel - 1]; Oid partitionMethod = DatumGetChar(partMethodDatum); Oid replicationModel = DatumGetChar(replicationModelDatum); if (IsCitusTableTypeInternal(partitionMethod, replicationModel, citusTableType)) { - Datum relationIdDatum = heap_getattr(heapTuple, - Anum_pg_dist_partition_logicalrelid, - tupleDescriptor, &isNull); + Datum relationIdDatum = datumArray[Anum_pg_dist_partition_logicalrelid - 1]; Oid relationId = DatumGetObjectId(relationIdDatum); diff --git a/src/backend/distributed/utils/colocation_utils.c b/src/backend/distributed/utils/colocation_utils.c index 51d8f9fbd..4edc9e424 100644 --- a/src/backend/distributed/utils/colocation_utils.c +++ b/src/backend/distributed/utils/colocation_utils.c @@ -947,10 +947,11 @@ ColocationGroupTableList(uint32 colocationId, uint32 count) HeapTuple heapTuple = systable_getnext(scanDescriptor); while (HeapTupleIsValid(heapTuple)) { - bool isNull = false; - Oid colocatedTableId = heap_getattr(heapTuple, - Anum_pg_dist_partition_logicalrelid, - tupleDescriptor, &isNull); + bool isNullArray[Natts_pg_dist_partition]; + Datum datumArray[Natts_pg_dist_partition]; + heap_deform_tuple(heapTuple, tupleDescriptor, datumArray, isNullArray); + Oid colocatedTableId = DatumGetObjectId( + datumArray[Anum_pg_dist_partition_logicalrelid - 1]); colocatedTableList = lappend_oid(colocatedTableList, colocatedTableId); heapTuple = systable_getnext(scanDescriptor); @@ -1116,7 +1117,6 @@ ColocatedTableId(Oid colocationId) { Oid colocatedTableId = InvalidOid; bool indexOK = true; - bool isNull = false; ScanKeyData scanKey[1]; int scanKeyCount = 1; @@ -1141,8 +1141,11 @@ ColocatedTableId(Oid colocationId) HeapTuple heapTuple = systable_getnext(scanDescriptor); while (HeapTupleIsValid(heapTuple)) { - colocatedTableId = heap_getattr(heapTuple, Anum_pg_dist_partition_logicalrelid, - tupleDescriptor, &isNull); + bool isNullArray[Natts_pg_dist_partition]; + Datum datumArray[Natts_pg_dist_partition]; + heap_deform_tuple(heapTuple, tupleDescriptor, datumArray, isNullArray); + colocatedTableId = DatumGetObjectId( + datumArray[Anum_pg_dist_partition_logicalrelid - 1]); /* * Make sure the relation isn't dropped for the remainder of diff --git a/src/test/regress/expected/multi_metadata_attributes.out b/src/test/regress/expected/multi_metadata_attributes.out index 85ececdac..67389f51a 100644 --- a/src/test/regress/expected/multi_metadata_attributes.out +++ b/src/test/regress/expected/multi_metadata_attributes.out @@ -6,7 +6,9 @@ -- part of the query so new changes to it won't affect this test. SELECT attrelid::regclass, attname, atthasmissing, attmissingval FROM pg_attribute -WHERE atthasmissing AND attrelid NOT IN ('pg_dist_node'::regclass, 'pg_dist_rebalance_strategy'::regclass) +WHERE atthasmissing AND attrelid NOT IN ('pg_dist_node'::regclass, + 'pg_dist_rebalance_strategy'::regclass, + 'pg_dist_partition'::regclass) ORDER BY attrelid, attname; attrelid | attname | atthasmissing | attmissingval --------------------------------------------------------------------- diff --git a/src/test/regress/sql/multi_metadata_attributes.sql b/src/test/regress/sql/multi_metadata_attributes.sql index 174c92331..e285db192 100644 --- a/src/test/regress/sql/multi_metadata_attributes.sql +++ b/src/test/regress/sql/multi_metadata_attributes.sql @@ -7,5 +7,7 @@ -- part of the query so new changes to it won't affect this test. SELECT attrelid::regclass, attname, atthasmissing, attmissingval FROM pg_attribute -WHERE atthasmissing AND attrelid NOT IN ('pg_dist_node'::regclass, 'pg_dist_rebalance_strategy'::regclass) +WHERE atthasmissing AND attrelid NOT IN ('pg_dist_node'::regclass, + 'pg_dist_rebalance_strategy'::regclass, + 'pg_dist_partition'::regclass) ORDER BY attrelid, attname;