aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/access/common/tupconvert.c32
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 &&