Free pre-modification HeapTuple in ALTER TABLE ... TYPE ...
authorAndrew Dunstan <[email protected]>
Fri, 11 Jan 2019 22:12:54 +0000 (17:12 -0500)
committerAndrew Dunstan <[email protected]>
Fri, 11 Jan 2019 22:12:54 +0000 (17:12 -0500)
This was an oversight in commit 3b174b1a3.

Per offline gripe from Alvaro Herrera

Backpatch to release 11.

src/backend/commands/tablecmds.c

index e7017e90d108388eac65a605a9b4ddcb1220dd46..d2781cbf19454a2266917b54b88bb366a3ea0b06 100644 (file)
@@ -9648,6 +9648,7 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
            Datum       valuesAtt[Natts_pg_attribute];
            bool        nullsAtt[Natts_pg_attribute];
            bool        replacesAtt[Natts_pg_attribute];
+           HeapTuple   newTup;
 
            MemSet(valuesAtt, 0, sizeof(valuesAtt));
            MemSet(nullsAtt, false, sizeof(nullsAtt));
@@ -9673,8 +9674,10 @@ ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
            replacesAtt[Anum_pg_attribute_attmissingval - 1] = true;
            nullsAtt[Anum_pg_attribute_attmissingval - 1] = false;
 
-           heapTup = heap_modify_tuple(heapTup, RelationGetDescr(attrelation),
-                                       valuesAtt, nullsAtt, replacesAtt);
+           newTup = heap_modify_tuple(heapTup, RelationGetDescr(attrelation),
+                                      valuesAtt, nullsAtt, replacesAtt);
+           heap_freetuple(heapTup);
+           heapTup = newTup;
            attTup = (Form_pg_attribute) GETSTRUCT(heapTup);
        }
    }