PGError: ПОМИЛКА: дозвіл відмовлено у зв'язку (при використанні Heroku)


76

Нещодавно я пройшов процес міграції бази даних, як описано тут:

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

Тепер я бачу ряд помилок у журналах, як це:

PGError: ПОМИЛКА: дозвіл відмовлено у зв'язку

Будь-які ідеї щодо того, що мені робити, щоб це виправити?


У мене було те саме. Я видалив рядки в БД на Heroku, і мені довелося почекати кілька хвилин, а потім це дозволило мені перенести БД
slindsey3000,

Відповіді:


163

У мене була подібна проблема, але першопричиною було те, що мій додаток вказував на стару базу даних розробників, яка перевищила обмеження в 10000 рядків.

Хоча я створив нову базову базу даних і створив резервну копію, програма все ще вказувала на стару БД розробника.

heroku pg:info

Перевірте, щоб побачити рядки: 10300/10000 (тоді у вас проблема)

Вам потрібно буде

1) Створити нову БД з більшою кількістю рядків (Основна або "Виробнича" -> Heroku, здається, змушує оновити, щоб заробити більше грошей errrrrr)

2) зробити резервну копію старої БД за допомогою pgbackups: heroku pg:backups:capture SMALL_DB_NAME

3) відновити резервну копію до нова БД: heroku pg:backups:restore BACKUP_ID BIG_DB_NAME(докладніше див. посилання нижче)

4) РЕКЛАМУЙТЕ нову БД до основної програми:heroku pg:promote BIG_DB_NAME

завжди можна використовувати:

heroku maintenance:on (щоб вимкнути програму під час оновлення)


heroku maintenance:off


heroku pg:info (для перевірки статусу)

Якщо це проблема, ви можете перевірити: https://devcenter.heroku.com/articles/heroku-postgres-starter-tier https://devcenter.heroku.com/articles/migrating-from-shared-database -до-героку-постгрес


1
Дякую, Ештон - пробігши все це знову працювало чудово.
саттрі

Шахта каже: Рядки: 57845/10000 (доступ до запису скасовано)
carbonr

Так, добре, це поставить вас за межу. Схоже, вам доведеться оновити, і я сподіваюся, ці інструкції допоможуть!
Ештон Томас

Дякую .. Ти врятував мою роботу!
Mário Carvalho

1
@AugustinRiedinger, вам доведеться почекати близько 30 хвилин, згідно stackoverflow.com/a/12710024/6678
Леонід Шевцов

11

ОНОВЛЕННЯ: Відповідь Ештона це вражає в цій ситуації, яка є дуже конкретною для Heroku. Якщо ви знайшли це під час пошуку повідомлень про помилки або проблеми PostgreSQL, але не використовуєте Heroku, будь ласка, знайдіть інші запитання, які, швидше за все, стосуються вашої ситуації.


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

Давайте розберемося, яка ситуація зараз. Спробуйте підключитися psqlта запустити:

\dp the_problem_table

і покажіть дозволи, про які повідомляється. Також покажіть результат:

SHOW current_user;

запускати з psqlі під час запуску як запит SQL зсередини вашої програми.

Відредагуйте своє запитання, щоб додати цю інформацію та повний, точний текст отриманого повідомлення про помилку .


Heroku не дозволяє низькорівневий доступ до своєї бази даних
Малъ Скрылевъ

@ МалъСкрылевъ ... і нічого тут не є "низьким рівнем"
Крейг Рінгер,

psqlу цьому контексті
низький рівень

@ МалъСкрылевъ Тоді ви помиляєтесь. Ви можете підключитися безпосередньо до бази даних Heroku за допомогою psql. Це простий спосіб, heroku pg:psqlале ви також можете використовувати psqlбезпосередньо за допомогою рядка підключення до бази даних, отриманого з heroku.
Крейг Рінгер,

Тоді ви відповідаєте не повно, і не висвітлюйте питання. Тому що це не дає відповіді про те, як зробити доступ до psql на heroku.
Малъ Скрылевъ

10

Етапи, засновані на відповіді Ештона для оновлення з Dev (обмеження на 10 тис. Рядків) до базового (обмеження на 10 млн рядків)

перевірити db рядків перевищено ліміт

heroku pg:info

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

heroku maintenance:on
heroku ps:scale worker=0

якщо у вас немає pgbackups

heroku addons:add pgbackups

резервну копію бази даних та отримати ідентифікатор резервної копії

heroku pg:backups:capture

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

  1. увійдіть на https://addons.heroku.com
  2. пошук "Heroku Postgres"
  3. вибрати план та заявку
  4. додайте його

переглядаючи конфігурацію heroku, ви повинні побачити нову URL-адресу db

heroku config --remote heroku

відновити резервну копію до нових db - -

heroku pg:backups:restore BACKUP_ID NEW_DB_URL

змінити DATABASE_URL

heroku pg:promote NEW_DB_URL

увімкнути програму та працівників

heroku maintenance:off
heroku ps:scale worker=1

Можливо, корисно згадати, що команда змінилася з героку pgbackups:captureна героку pg:backups:capture. Зверніть увагу на крапку з комою міжpg:backups
Рошан

6

Після видалення зайвих рядків ви не одразу отримаєте привілеї на вставку. У цьому випадку видаліть зайві рядки і просто запустіть 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

1
Дуже дякую! Це допомогло. Ще додати: мені довелося додати param --app = APP_NAME, оскільки БД підключена до конкретного додатка на моєму Heroku.
PokatilovArt

@PokatilovArt раді, що це допомогло
manish_s

2

Я потрапив у ситуацію, коли перевищив обмеження кількості рядків.

Ця відповідь пояснила, як перерахувати кількість рядків у кожній таблиці: http://stackoverflow.com/questions/12701711/heroku-row-count-incorrect

Дуже цінно знати.

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


2

У мене була подібна проблема в моєму додатку Redmine:

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

Мої кроки були:

  1. Я зробив резервну копію старої програми та бази даних Redmine.
  2. Я розгорнув нову версію Redmine - вона працювала ідеально
  3. Я відновив старий Redmine як сервер розробки, і при спробі отримати доступ до головної веб-сторінки з'явилася помилка.

Причиною моєї проблеми було просто неправильне ім'я користувача у старому файлі config / database.yml Redmine

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.