Подтвердить что ты не робот

Postgresql: ошибка "должен быть владельцем отношения" при изменении объекта владельца

Что такое grant параметр/трюк, который мне нужно предоставить текущему пользователю ( "userA" ), чтобы он мог изменить владельца объекта, принадлежащего другому пользователю ( "userC" )?

Точнее, таблица контактов принадлежит пользователю C, и когда я выполняю следующий запрос для изменения владельца к пользователю B, связанному с userA:

alter table contact owner to userB;

Я получаю эту ошибку:

ERROR:  must be owner of relation contact

Но у пользователяA все необходимые права для этого обычно (опция предоставления "create on schema" должна быть достаточной):

grant select,insert,update,delete on all tables in schema public to userA; 
grant select,usage,update on all sequences in schema public to userA;
grant execute on all functions in schema public to userA;
grant references, trigger on all tables in schema public to userA;
grant create on schema public to userA;
grant usage on schema public to userA;

Thks


Выход командной строки:

[email protected]:~# psql -U userA myDatabase
myDataBase=>\dt contact
    List of relations
Schema |  Name   |   Type   |  Owner
-------+---------+----------+---------
public | contact | table    | userC
(1 row)
myDataBase=>
myDataBase=>alter table contact owner to userB;
ERROR:  must be owner of relation public.contact
myDataBase=>
4b9b3361

Ответ 1

Благодаря комментарию Майка, я перечитал документ, и я понял, что мой текущий пользователь (ака. userA, который уже имеет привилегию создания) не был прямым/косвенным членом новой собственной роли...

Итак, решение было довольно простым, я только что сделал этот грант:

grant userB to userA;

Что все люди; -)


Update:

Другое требование состоит в том, что объект должен принадлежать пользователю userA перед его изменением...

Ответ 2

Из прекрасного руководства.

Вы должны владеть таблицей, чтобы использовать ALTER TABLE.

Или быть суперпользователем базы данных.

ОШИБКА: должен быть владельцем отношения

Сообщения об ошибках PostgreSQL обычно находятся на месте. Это одно место.