Ошибка 'django permission denied for relation'

  • Опубликовано:
  • Теги: postgresql

В интерактивной оболочке postgres нужно подключиться к нужной базе и выполнить:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to USERNAME;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_db_user;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO your_db_user;

Также может выскочить ошибка

ProgrammingError: must be owner of relation
Тогда выполняем:

ALTER DATABASE your_db OWNER TO your_db_user;
ALTER TABLE your_table OWNER TO your_db_user;

UPDATE

Но скорее всего в данном случае придется менять владельца у всех таблиц в данной базе, поэтому используем REASSIGN

В оболочке psql:

postgres=# \c yourdb
You are now connected to database "yourdb" as user "postgres".
yourdb=# \dt
yourdb=# REASSIGN OWNED BY old_role TO new_role;
REASSIGN OWNED
yourdb=# \dt

UPDATE 2

Если каким-то образом оказалось, что таблицы принадлежат администратору базы, который указан владельцем системных таблиц, тогда выбросит ошибку.

ERROR: cannot reassign ownership of objects owned by role BASE_ADMIN because they are required by the database system

В таком случае есть другое решение:

SELECT 'ALTER TABLE '|| schemaname || '.' || tablename ||' OWNER TO my_new_owner;'
FROM pg_tables WHERE NOT schemaname IN ('pg_catalog', 'information_schema')
ORDER BY schemaname, tablename;

На дисплее отобразится список команд для переименования каждой таблицы. Эти команды надо скопировать и вставить тут же в оболочке postgres.

Найдено на SO