Postgres REASSIGN OWNED только для 1 базы данных

Я хочу использовать REASSIGN OWNED запрос на изменение всех объектов в 1 базе данных от владельца A к владельцу B.

Допустим, у меня есть следующие базы данных:

 postgres              | postgres        | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0             | postgres        | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                       |                 |          |             |             | postgres=CTc/postgres
 template1             | postgres        | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                       |                 |          |             |             | postgres=CTc/postgres
 db1                   | user1           | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 db2                   | user1           | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 db3                   | user2           | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

Я хочу, чтобы db1 и все объекты внутри, так что они принадлежат user2. Я бегу:

postgres=# \c db1
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
You are now connected to database "db1" as user "postgres".
db1=# REASSIGN OWNED BY user1 TO user2;
REASSIGN OWNED

Владелец изменился, как и должно быть для db1 и всех его объектов. Но команда также сменила владельца db2. Не объекты в db2, а только база данных (например, оператор ALTER DATABASE):

 postgres              | postgres        | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0             | postgres        | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                       |                 |          |             |             | postgres=CTc/postgres
 template1             | postgres        | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                       |                 |          |             |             | postgres=CTc/postgres
 db1                   | user2           | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 db2                   | user2           | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 db3                   | user2           | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 

Это нормальное поведение? Как я могу запустить REASSIGN OWNED без изменения других баз данных?

1 ответ

Документация, цитируемая в комментарии Даниэля Верите, гласит:

old_role

The name of a role. The ownership of all the objects within the current database, and of all shared objects (databases, tablespaces), owned by this role will be reassigned to new_role.

так что это по спецификации. Если это не то, что вы хотите, я думаю, что вам нужно изложить свой вариант использования более полно.

Другие вопросы по тегам