ALTER TABLE ... OWNER TO does not change ownership recursively
It seems that ALTER TABLE ... OWNER TO does not change the ownership of
any inheriting tables. The documentation states:
If ONLY is specified, only that table is altered. If ONLY is not
specified, the table and any descendant tables are altered.
Which to me indicates that ownership should be altered on the target table and
any descendant tables as well.
Here is a small test case to reproduce the problem:
create table parent (id int);
create table child () inherits (parent);
create role new_owner;
alter table parent owner to new_owner;
After performing this sequence of commands, \d looks like:
Schema | Name | Type | Owner
--------+---------------+----------+-----------
public | child | table | ryan
public | parent | table | new_owner
But I would expect that without specifying only, I would get:
Schema | Name | Type | Owner
--------+---------------+----------+-----------
public | child | table | new_owner
public | parent | table | new_owner
Attached is a patch which fixes this issue. It is based off of REL8_4_11.
Version: PostgreSQL 8.4.11 on i386-apple-darwin10.8.0, compiled by GCC i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3), 64-bit
-Ryan Kelly
Attachments:
at-owner-inheritance.patchtext/x-diff; charset=us-asciiDownload+45-12
Ryan Kelly <rpkelly22@gmail.com> writes:
It seems that ALTER TABLE ... OWNER TO does not change the ownership of
any inheriting tables. The documentation states:
If ONLY is specified, only that table is altered. If ONLY is not
specified, the table and any descendant tables are altered.
If you read further (down in the Notes section of the ALTER TABLE page),
you'll find
The TRIGGER, CLUSTER, OWNER, and TABLESPACE actions never
recurse to descendant tables; that is, they always act as though
ONLY were specified.
So it is operating as intended and documented. If we were starting
from a green field I'd question whether these exceptions were a good
idea, but at this point changing the behavior seems more likely to break
user code than to help people. (In particular, the possible
consequences for reloading old dump files seem a bit scary, since
pg_dump emits lots of ALTER OWNER commands.)
regards, tom lane