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.
так что это по спецификации. Если это не то, что вы хотите, я думаю, что вам нужно изложить свой вариант использования более полно.