diff options
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/access/common/tupconvert.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/backend/access/common/tupconvert.c b/src/backend/access/common/tupconvert.c index 8cda16431c1..5ed136246af 100644 --- a/src/backend/access/common/tupconvert.c +++ b/src/backend/access/common/tupconvert.c @@ -144,8 +144,18 @@ convert_tuples_by_position(TupleDesc indesc, { for (i = 0; i < n; i++) { - Form_pg_attribute inatt; - Form_pg_attribute outatt; + Form_pg_attribute inatt = TupleDescAttr(indesc, i); + Form_pg_attribute outatt = TupleDescAttr(outdesc, i); + + /* + * If the input column has a missing attribute, we need a + * conversion. + */ + if (inatt->atthasmissing) + { + same = false; + break; + } if (attrMap[i] == (i + 1)) continue; @@ -155,8 +165,6 @@ convert_tuples_by_position(TupleDesc indesc, * also dropped, we needn't convert. However, attlen and attalign * must agree. */ - inatt = TupleDescAttr(indesc, i); - outatt = TupleDescAttr(outdesc, i); if (attrMap[i] == 0 && inatt->attisdropped && inatt->attlen == outatt->attlen && @@ -347,8 +355,18 @@ convert_tuples_by_name_map_if_req(TupleDesc indesc, same = true; for (i = 0; i < n; i++) { - Form_pg_attribute inatt; - Form_pg_attribute outatt; + Form_pg_attribute inatt = TupleDescAttr(indesc, i); + Form_pg_attribute outatt = TupleDescAttr(outdesc, i); + + /* + * If the input column has a missing attribute, we need a + * conversion. + */ + if (inatt->atthasmissing) + { + same = false; + break; + } if (attrMap[i] == (i + 1)) continue; @@ -358,8 +376,6 @@ convert_tuples_by_name_map_if_req(TupleDesc indesc, * also dropped, we needn't convert. However, attlen and attalign * must agree. */ - inatt = TupleDescAttr(indesc, i); - outatt = TupleDescAttr(outdesc, i); if (attrMap[i] == 0 && inatt->attisdropped && inatt->attlen == outatt->attlen && |