Обсуждение: ALTER TABLE ... OWNER TO does not change ownership recursively

Поиск
Список
Период
Сортировка

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

От
Ryan Kelly
Дата:
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

Вложения

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

От
Tom Lane
Дата:
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