ALTER TABLE ... OWNER TO does not change ownership recursively

Started by Ryan Kellyalmost 14 years ago2 messagesbugs
Jump to latest
#1Ryan Kelly
rpkelly22@gmail.com

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
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Ryan Kelly (#1)
Re: ALTER TABLE ... OWNER TO does not change ownership recursively

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