Обсуждение: 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
Вложения
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