PGError: ERROR: Berechtigung für Beziehung verweigert (bei Verwendung von Heroku)


76

Ich habe kürzlich den hier beschriebenen Datenbankmigrationsprozess durchlaufen:

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

Jetzt sehe ich eine Reihe von Fehlern in den Protokollen wie folgt:

PGError: ERROR: Berechtigung für Beziehung verweigert

Irgendwelche Ideen, was ich tun sollte, um das Problem zu beheben?


Ich hatte das gleiche. Ich habe Zeilen in der DB auf Heroku gelöscht und musste ein paar Minuten warten und dann konnte ich die DB migrieren
slindsey3000

Antworten:


163

Ich hatte ein ähnliches Problem, aber die Hauptursache war, dass meine App auf die alte Entwicklerdatenbank zeigte, die das Limit von 10.000 Zeilen überschritten hatte.

Obwohl ich eine neue Basic-Datenbank erstellt und alles gesichert habe, zeigte die App immer noch auf die alte Entwicklungsdatenbank.

heroku pg:info

Überprüfen Sie die Zeilen: 10300/10000 (dann haben Sie ein Problem)

Sie müssen

1) eine neue Datenbank mit mehr Zeilen erstellen (Basic oder die "Production" -> Heroku scheint ein Upgrade zu erzwingen, um mehr Geld zu verdienen errrrrr)

2) die alte Datenbank mit pgbackups sichern: heroku pg:backups:capture SMALL_DB_NAME

3) die Sicherung auf wiederherstellen Die neue Datenbank : heroku pg:backups:restore BACKUP_ID BIG_DB_NAME(Weitere Informationen finden

Sie unter den folgenden Links.) 4) FÖRDERN Sie die neue Datenbank an die primäre Datenbank für die App:heroku pg:promote BIG_DB_NAME

kann immer nutzen:

heroku maintenance:on (um die App während des Updates zu deaktivieren)


heroku maintenance:off


heroku pg:info (um den Status zu überprüfen)

Wenn dies das Problem ist, sollten Sie Folgendes überprüfen: https://devcenter.heroku.com/articles/heroku-postgres-starter-tier https://devcenter.heroku.com/articles/migrating-from-shared-database -zu-Heroku-Postgres


1
Danke Ashton - all das hat wieder perfekt funktioniert.
Suttree

Meins sagt: Zeilen: 57845/10000 (Schreibzugriff widerrufen)
carbonr

Ja, das würde dich über das Limit bringen. Sieht so aus, als müssten Sie ein Upgrade durchführen, und ich hoffe, diese Anweisungen helfen!
Ashton Thomas

Danke .. Du hast meinen Job gerettet!
Mário Carvalho

1
@AugustinRiedinger müssen Sie laut stackoverflow.com/a/12710024/6678
Leonid Shevtsov

11

UPDATE: Ashtons Antwort zeigt es in dieser Situation, die sehr Heroku-spezifisch ist. Wenn Sie dies bei einer Suche nach PostgreSQL-Fehlermeldungen oder -Problemen gefunden haben, aber Heroku nicht verwenden, suchen Sie nach anderen Fragen, die eher auf Ihre Situation zutreffen.


Vermutlich ist die PostgreSQL-Benutzer-ID, mit der Sie sich verbinden, nicht der Eigentümer Ihrer Tabellen, und Sie haben keine expliziten GRANTAnweisungen ausgegeben , um ihr Zugriff darauf zu gewähren. Ohne genau zu sehen , was Sie bei der Migration ausgeführt haben, ist es schwer, mehr zu sagen - und Heroku versteckt sowieso viele der Interna.

Lassen Sie uns herausfinden, wie die aktuelle Situation ist. Versuchen Sie, eine Verbindung herzustellen psqlund auszuführen:

\dp the_problem_table

und zeigen die gemeldeten Berechtigungen. Zeigen Sie auch das Ergebnis von:

SHOW current_user;

Ausführen von psqlund wenn als SQL-Abfrage in Ihrer Anwendung ausgeführt.

Bearbeiten Sie Ihre Frage, um diese Informationen und den vollständigen, genauen Text der Fehlermeldung hinzuzufügen, die Sie erhalten .


Heroku erlaubt keinen einfachen Zugriff auf seine
Datenbank

@ МалъСкрылевъ ... und nichts hier ist "niedriges Niveau"
Craig Ringer

psqlin diesem Zusammenhang lowlevel
Малъ Скрылевъ

@ МалъСкрылевъ Dann bist du falsch. Sie können mit direkt eine Verbindung zu einer Heroku-Datenbank herstellen psql. Der einfache Weg ist, heroku pg:psqlaber Sie können ihn auch psqldirekt mit der von heroku erhaltenen Datenbankverbindungszeichenfolge verwenden.
Craig Ringer

Dann antworten Sie nicht voll und decken die Frage nicht ab. Weil es nicht die Antwort gibt, wie man auf Heroku auf psql zugreifen kann.
Малъ Скрылевъ

10

Schritte basierend auf Ashtons Antwort auf ein Upgrade von Dev (maximal 10.000 Zeilen) auf Basic (maximal 10 Millionen Zeilen)

Überprüfen Sie, ob die DB-Zeilen das Limit überschritten haben

heroku pg:info

Deaktivieren Sie die App und die Mitarbeiter, um sicherzustellen, dass während des Datenbank-Upgrades keine Datenbankänderungen vorgenommen werden

heroku maintenance:on
heroku ps:scale worker=0

wenn Sie keine pgbackups haben

heroku addons:add pgbackups

Datenbank sichern und Sicherungs-ID abrufen

heroku pg:backups:capture

Datenbank mit Webinterface hinzufügen

  1. Melden Sie sich bei https://addons.heroku.com an
  2. Suche "Heroku Postgres"
  3. Plan und Anwendung auswählen
  4. füge es hinzu

Wenn Sie die Heroku-Konfiguration anzeigen, sollte eine neue Datenbank-URL angezeigt werden

heroku config --remote heroku

Backup auf neue Datenbank wiederherstellen

heroku pg:backups:restore BACKUP_ID NEW_DB_URL

Ändern Sie DATABASE_URL

heroku pg:promote NEW_DB_URL

Aktivieren Sie die App und die Mitarbeiter

heroku maintenance:off
heroku ps:scale worker=1

Vielleicht ist es nützlich zu erwähnen, dass sich der Befehl von Heroku pgbackups:capturezu Heroku geändert hat pg:backups:capture. Beachten Sie das Semikolon zwischenpg:backups
Roshan

6

Nach dem Löschen der zusätzlichen Zeilen erhalten Sie die Einfügeberechtigungen nicht sofort zurück. Löschen Sie in diesem Fall die zusätzlichen Zeilen und führen Sie sie anschließend heroku pg:infoaus. Dadurch werden die Berechtigungen Ihrer Datenbank aktualisiert und Sie erhalten den Zugriff in wenigen Minuten wieder. Es ist nicht erforderlich, die vorhandene Datenbank in eine neue zu klonen und die neue als Datenbank Ihrer App festzulegen.

$ 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
Danke vielmals! Es half. Mehr zum Hinzufügen: Ich musste param --app = APP_NAME hinzufügen, da DB mit einer bestimmten Anwendung auf meinem Heroku verbunden ist.
PokatilovArt

@ PokatilovArt froh, dass es geholfen hat
manish_s


2

Ich hatte ein ähnliches Problem bei meiner Redmine-Anwendung:

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

Meine Schritte waren:

  1. Ich habe ein Backup der alten Redmine-Anwendung und -Datenbank erstellt.
  2. Ich habe eine neue Version von Redmine bereitgestellt - es hat perfekt funktioniert
  3. Ich habe die alte Redmine als Entwicklungsserver wiederhergestellt und beim Versuch, auf die Hauptwebseite zuzugreifen, eine Fehlermeldung erhalten.

Die Ursache für mein Problem war nur der falsche Benutzername in der alten redmine-Datei config / database.yml

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.