Free pre-modification HeapTuple in ALTER TABLE ... TYPE ...
authorAndrew Dunstan <andrew@dunslane.net>
Fri, 11 Jan 2019 22:12:54 +0000 (17:12 -0500)
committerAndrew Dunstan <andrew@dunslane.net>
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);
                }
        }