]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Don't call CheckAttributeType() with InvalidOid on dropped cols
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 23 Apr 2026 18:05:27 +0000 (21:05 +0300)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Thu, 23 Apr 2026 18:28:59 +0000 (21:28 +0300)
If CheckAttributeType() is called with InvalidOid, it performs a bunch
of pointless, futile syscache lookups with InvalidOid, but ultimately
tolerates it and has no effect. We were calling it with InvalidOid on
dropped columns, but it seems accidental that it works, so let's stop
doing it.

Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://www.postgresql.org/message-id/93ce56cd-02a6-4db1-8224-c8999372facc@iki.fi
Backpatch-through: 14

src/backend/catalog/heap.c

index 2c59e2a7b1f6a16f8846f3d5030b4f442daa142b..72ab7df21bf12abbc11df3eb2e6e4b7c099390e3 100644 (file)
@@ -504,11 +504,15 @@ CheckAttributeNamesTypes(TupleDesc tupdesc, char relkind,
         */
        for (i = 0; i < natts; i++)
        {
-               CheckAttributeType(NameStr(TupleDescAttr(tupdesc, i)->attname),
-                                                  TupleDescAttr(tupdesc, i)->atttypid,
-                                                  TupleDescAttr(tupdesc, i)->attcollation,
+               Form_pg_attribute attr = TupleDescAttr(tupdesc, i);
+
+               if (attr->attisdropped)
+                       continue;
+               CheckAttributeType(NameStr(attr->attname),
+                                                  attr->atttypid,
+                                                  attr->attcollation,
                                                   NIL, /* assume we're creating a new rowtype */
-                                                  flags | (TupleDescAttr(tupdesc, i)->attgenerated == ATTRIBUTE_GENERATED_VIRTUAL ? CHKATYPE_IS_VIRTUAL : 0));
+                                                  flags | (attr->attgenerated == ATTRIBUTE_GENERATED_VIRTUAL ? CHKATYPE_IS_VIRTUAL : 0));
        }
 }