Ошибка нужно быть владельцем отношения

What is the grant option/trick I need to give to the current user («userA«) to allow him to change a object’s owner which belongs by another user («userC«)?

More precisely, the contact table is owned by the userC and when I perform the following query for changing the owner to the userB, connected with the userA:

alter table contact owner to userB;

I get this error:

ERROR:  must be owner of relation contact

But userA has all needed rights to do that normally (the «create on schema» grant option should be enough):

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;

Command line output:

root@server:~# 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=>

Что такое 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 обычно находятся на месте. Это одно место.

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

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

alter table contact owner to userB;

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

ERROR:  must be owner of relation contact

Но userA имеет все необходимые права, чтобы делать это в обычном режиме (параметра предоставления « 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;

Спасибо


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

root@server:~# 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=>

3 ответа

Лучший ответ

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

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

grant userB to userA;

Это все, ребята ;-)


Обновить:

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


107

Marcus Campbell
15 Мар 2019 в 19:03

Это решило мою проблему: пример оператора alter table для смены владельца.

ALTER TABLE databasechangelog OWNER TO arwin_ash;
ALTER TABLE databasechangeloglock OWNER TO arwin_ash;


9

Vivek
18 Янв 2020 в 20:40

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

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

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

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

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


16

Mike Sherrill ‘Cat Recall’
18 Фев 2015 в 13:44

Что такое 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=>

Ответ 1

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

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

grant userB to userA;

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


Update:

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

Ответ 2

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

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

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

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

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

What is the grant option/trick I need to give to the current user («userA«) to allow him to change a object’s owner which belongs by another user («userC«)?

More precisely, the contact table is owned by the userC and when I perform the following query for changing the owner to the userB, connected with the userA:

alter table contact owner to userB;

I get this error:

ERROR:  must be owner of relation contact

But userA has all needed rights to do that normally (the «create on schema» grant option should be enough):

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


Command line output:

root@server:~# 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=>

What is the grant option/trick I need to give to the current user («userA«) to allow him to change a object’s owner which belongs by another user («userC«)?

More precisely, the contact table is owned by the userC and when I perform the following query for changing the owner to the userB, connected with the userA:

alter table contact owner to userB;

I get this error:

ERROR:  must be owner of relation contact

But userA has all needed rights to do that normally (the «create on schema» grant option should be enough):

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


Command line output:

root@server:~# 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=>

I have using rails application with PostgreSql database.
My application is working fine with PostgreSql.
I want to run my migration on server, I run a command RAILS_ENV=production rake db:migrate
then I get following error:

PGError:Error: must be owner of
relation table_name

I don’t understand why this error occurs?
Please suggest any solution to resolve this error.

Thanks!

Amokrane Chentir's user avatar

asked Nov 30, 2010 at 10:21

Jayashri's user avatar

You want to change something in the table, but you don’t have the permissions to do so. Only the owner of the table can do so.

Use a different database role, the owners role, and you’re fine.

answered Nov 30, 2010 at 10:24

Frank Heikens's user avatar

Frank HeikensFrank Heikens

113k24 gold badges137 silver badges132 bronze badges

2

I have using rails application with PostgreSql database.
My application is working fine with PostgreSql.
I want to run my migration on server, I run a command RAILS_ENV=production rake db:migrate
then I get following error:

PGError:Error: must be owner of
relation table_name

I don’t understand why this error occurs?
Please suggest any solution to resolve this error.

Thanks!

Amokrane Chentir's user avatar

asked Nov 30, 2010 at 10:21

Jayashri's user avatar

You want to change something in the table, but you don’t have the permissions to do so. Only the owner of the table can do so.

Use a different database role, the owners role, and you’re fine.

answered Nov 30, 2010 at 10:24

Frank Heikens's user avatar

Frank HeikensFrank Heikens

113k24 gold badges137 silver badges132 bronze badges

2

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

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

alter table contact owner to userB;

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

ERROR:  must be owner of relation contact

Но у пользователя userA есть все необходимые права, чтобы делать это в обычном режиме (опции предоставления » 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;

Спасибо


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

[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=>

Что такое 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

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

root@server:~# 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=>

Я внес некоторые изменения на сайт в локальной версии, нажал модели на сервер и сделал makemigrations

(revampenv) [email protected]:~/revamp$ python manage.py makemigrations gallery
Migrations for 'gallery':
  0032_auto_20170829_0058.py:
    - Create model Area
    - Create model Color
    - Create model ThumbnailCache
    - Add field unique_key_string to image
    - Alter field example on image
    - Alter field timeline on image

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

(revampenv) [email protected]:~/revamp$ python manage.py migrate
Operations to perform:
  Apply all migrations: account, sessions, admin, auth, thumbnail, contenttypes, gallery
Running migrations:
  Rendering model states... DONE
  Applying gallery.0032_auto_20170829_0058...Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/core/management/commands/migrate.py", line 200, in handle
    executor.migrate(targets, plan, fake=fake, fake_initial=fake_initial)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 92, in migrate
    self._migrate_all_forwards(plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 121, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/executor.py", line 198, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/migration.py", line 123, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/migrations/operations/fields.py", line 62, in database_forwards
    field,
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/postgresql/schema.py", line 21, in add_field
    super(DatabaseSchemaEditor, self).add_field(model, field)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 396, in add_field
    self.execute(sql, params)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/base/schema.py", line 110, in execute
    cursor.execute(sql, params)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/utils.py", line 95, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/home/sammy/revamp/revampenv/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: must be owner of relation gallery_image

У меня была эта или аналогичная ошибка раньше, когда база данных db имела дубликат ниже для локального env, но это не так.

(примечание) это также не подходит для других моделей

(revampenv) [email protected]:~/revamp$ python manage.py makemigrations account
Migrations for 'account':
  0003_userprofile_bio.py:
    - Add field bio to userprofile


(revampenv) [email protected]:~/revamp$ python manage.py migrate
  ...
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: must be owner of relation account_userprofile

Обновление попыталось изменить владельца базы данных

postgres=# ALTER DATABASE color_db OWNER TO revamp;
ALTER DATABASE

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'color_db',
        'USER': 'revamp',
        'PASSWORD': 'xxx',
        'HOST': 'localhost',
        'PORT': '',
    }
}

но он все равно возвращает ту же ошибку

(revampenv) [email protected]:~/revamp$ python manage.py migrate
...
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: must be owner of relation account_userprofile

Пытаюсь удалить только что созданный тригер и процедуру в Postgresql и выдает такую ошибку.

Пробовал следовать манам и сделать текущего пользователя владельцем базы, с которой работаю. Хотя он и так, вроде, был владельцем. тут написано как. Так же питался дать все права как сказано тут

SQL для удаления выглядит так:

DROP TRIGGER IF EXISTS update_params ON XXX CASCADE;

Помогите разобраться, в чем может быть дело?

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

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

alter table contact owner to userB;

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

ERROR:  must be owner of relation contact

Но userA имеет все необходимые права, чтобы делать это в обычном режиме (параметра предоставления « 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;

Спасибо


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

root@server:~# 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=>

3 ответа

Лучший ответ

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

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

grant userB to userA;

Это все, ребята ;-)


Обновить:

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


107

Marcus Campbell
15 Мар 2019 в 19:03

Это решило мою проблему: пример оператора alter table для смены владельца.

ALTER TABLE databasechangelog OWNER TO arwin_ash;
ALTER TABLE databasechangeloglock OWNER TO arwin_ash;


9

Vivek
18 Янв 2020 в 20:40

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

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

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

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

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


16

Mike Sherrill ‘Cat Recall’
18 Фев 2015 в 13:44

Понравилась статья? Поделить с друзьями:
  • Ошибка не отмечена как пишется и почему
  • Ошибка нттр при обращении к серверу что делать
  • Ошибка не отмечена впр
  • Ошибка нттр 503 что значит
  • Ошибка не определен базовый класс