PGError: ERROR: разрешение отклонено за отношение (при использовании Heroku)

Недавно я прошел процесс миграции базы данных, как описано здесь:

https://devcenter.heroku.com/articles/migrating-from-shared-database-to-heroku-postgres

Теперь я вижу в журналах несколько ошибок:

PGError: ERROR: разрешение отклонено для отношения

Любые идеи о том, что я должен сделать, чтобы исправить это?

Ответ 1

У меня была аналогичная проблема, но основная причина заключалась в том, что мое приложение указывало на старую базу данных dev, которая превысила предел в 10 000 строк.

Хотя я создал новую базовую базу данных и поддерживал все, приложение все еще указывало на старый dev DB.

heroku pg: info

Посмотрите строки: 10300/10000 (тогда у вас есть проблема)

Вам нужно будет

1) Создайте новую БД с большим количеством строк (Basic или "Production" ) → Heroku, похоже, заставляет модернизировать, чтобы заработать больше денег errrrrr)

2) резервное копирование старой БД с помощью pgbackups: heroku pgbackups:capture SMALL_DB_NAME

3) восстановить резервную копию новой БД: heroku pgbackups:restore BIG_DB_NAME BACKUP_ID (подробнее см. Ссылки ниже)

4) ПРОДВИЖИТЕ новую БД первичной для приложения: heroku pg:promote BIG_DB_NAME

всегда можно использовать:

heroku maintenance: on (чтобы отключить приложение при обновлении)


обслуживание героя: выкл


heroku pg: info (чтобы проверить статус)

Если это проблема, вы можете проверить: https://devcenter.heroku.com/articles/heroku-postgres-starter-tier https://devcenter.heroku.com/articles/migrating-from-shared-database-to-heroku-postgres

Ответ 2

ОБНОВЛЕНИЕ: ответ Эштона называет это в этой ситуации, что очень специфично для Героку. Если вы обнаружили это из поиска сообщений об ошибках PostgreSQL или проблем, но не используете Heroku, посмотрите другие вопросы, более вероятные для вашей ситуации.


Угадайте, что идентификатор пользователя PostgreSQL, с которым вы подключаетесь, не является владельцем ваших таблиц, и вы не опубликовали никаких явных операторов GRANT, чтобы предоставить им доступ к ним. Не видя точно, что вы бежали, когда вы много мигрировали, чтобы сказать больше, - и Героку все равно скрывает многие из внутренних элементов.

Давайте выясним, какова нынешняя ситуация. Попробуйте подключиться с помощью psql и запустить:

\dp the_problem_table

и покажите разрешенные сообщения. Также покажите результат:

SHOW current_user;

выполняется из psql и запускается как запрос SQL из вашего приложения.

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

Ответ 3

Шаги, основанные на ответе Эштона на обновление от Dev (ограничение строк 10k) до Basic (ограничение 10M строк)

проверить db строки преследуемый предел

heroku pg:info

отключить приложение и работников для обеспечения отсутствия изменений db во время обновления db

heroku maintenance:on
heroku ps:scale worker=0

если у вас нет pgbackups

heroku addons:add pgbackups

резервная база данных и получить идентификатор резервной копии

heroku pgbackups:capture

добавить db с веб-интерфейсом

  • войдите в https://addons.heroku.com
  • поиск "Heroku Postgres"
  • выберите план и приложение
  • добавить его

просмотреть конфигурацию heroku, вы должны увидеть новый URL-адрес db

heroku config --remote heroku

восстановить резервную копию в новый db

heroku pgbackups:restore NEW_DB_URL BACKUP_ID

изменить DATABASE_URL

heroku pg:promote NEW_DB_URL

включить приложение и работников

heroku maintenance:off
heroku ps:scale worker=1

Ответ 4

После удаления дополнительных строк вы сразу не получите привилегии вставки. В этом случае удалите лишние строки и просто запустите heroku pg:info после этого. Это обновит привилегии вашей БД, и вы получите доступ через несколько минут. Его не нужно клонировать существующую БД в новую и устанавливать новую как БД вашего приложения.

$ heroku pg:info

=== HEROKU_POSTGRESQL_BRONZE_URL, DATABASE_URL
Plan:        Hobby-dev
Status:      Available
Connections: 3/20
PG Version:  9.3.6
Created:     2014-03-01 13:47 UTC
Data Size:   1.25 GB
Tables:      4
Rows:        2098/10000 (Write access revoked) - refreshing
Fork/Follow: Unsupported
Rollback:    Unsupported
Add-on:      grinning-busily-5587

Ответ 5

Я был в ситуации, когда я превысил лимит числа строк.

В этом ответе объясняется, как перечислять количество строк в каждой таблице: http://stackoverflow.com/questions/12701711/heroku-row-count-incorrect

Очень ценно знать.

Вы можете войти в консоль psql через терминал, параметры подключения перечислены на панели инструментов heroku для вашего приложения!

Ответ 6

У меня была аналогичная проблема в моем приложении Redmine:

PG::InsufficientPrivilege: ERROR:  permission denied for relation settings
: SELECT  "settings".* FROM "settings"  WHERE "settings"."name" = 'plugin_redmine_wktime' LIMIT 1

Мои шаги:

  • Я сделал резервную копию старого приложения Redmine и базы данных.
  • Я развернул новую версию Redmine - она ​​отлично работала
  • Я восстановил старый Redmine в качестве сервера разработки и получил ошибку когда я попытался получить доступ к главной веб-странице.

Причиной моей проблемы было неправильное имя пользователя в старой конфигурации Redmine/database.yml