• Tom Lane's avatar
    Repair a longstanding bug in CLUSTER and the rewriting variants of ALTER · f73bed30
    Tom Lane authored
    TABLE: if the command is executed by someone other than the table owner (eg,
    a superuser) and the table has a toast table, the toast table's pg_type row
    ends up with the wrong typowner, ie, the command issuer not the table owner.
    This is quite harmless for most purposes, since no interesting permissions
    checks consult the pg_type row.  However, it could lead to unexpected failures
    if one later tries to drop the role that issued the command (in 8.1 or 8.2),
    or strange warnings from pg_dump afterwards (in 8.3 and up, which will allow
    the DROP ROLE because we don't create a "redundant" owner dependency for table
    rowtypes).  Problem identified by Cott Lang.
    
    Back-patch to 8.1.  The problem is actually far older --- the CLUSTER variant
    can be demonstrated in 7.0 --- but it's mostly cosmetic before 8.1 because we
    didn't track ownership dependencies before 8.1.  Also, fixing it before 8.1
    would require changing the call signature of heap_create_with_catalog(), which
    seems to carry a nontrivial risk of breaking add-on modules.
    f73bed30
heap.c 73.2 KB