it-swarm.com.de

Problembehandlung von "Django.db.utils.ProgrammingError: Berechtigung für Relation Django_migrations verweigert"

Was sind einige grundlegende Schritte für die Problembehandlung und die Eingrenzung der Ursache für den Fehler "Django.db.utils.ProgrammingError: Berechtigung für Relation Django_migrations" von Django verweigert?

Ich erhalte diese Nachricht nach einem anfangs stabilen Produktionsserver, hat jedoch einige Aspekte von Django, Postgres, Apache und einiges von Github geändert. Außerdem ist es seit einiger Zeit nicht mehr her, dass diese Änderungen vorgenommen wurden, und ich kann mich nicht an jede Änderung erinnern, die das Problem verursacht hat.

Ich erhalte die Nachricht, wenn ich python manage.py runserver oder einen anderen python manage.py ...-Befehl ausführt, außer python manage.py check, der besagt, dass das System in Ordnung ist.

17
user3062149

Ich konnte mein Problem basierend auf Anweisungen aus dieser Frage lösen. Grundsätzlich mussten Postgres-Berechtigungen dem Datenbankbenutzer erneut erteilt werden. In meinem Fall war dies der Benutzer, den ich in der Einstellungsdatei der virtuellen Umgebung eingerichtet hatte. Führen Sie Folgendes über die Befehlszeile (oder innerhalb von postgres) aus, wobei mydatabase und dbuser Ihre eigenen Datenbank- und Benutzernamen sein sollten: 

psql mydatabase -c "GRANT ALL ON ALL TABLES IN SCHEMA public to dbuser;"
psql mydatabase -c "GRANT ALL ON ALL SEQUENCES IN SCHEMA public to dbuser;"
psql mydatabase -c "GRANT ALL ON ALL FUNCTIONS IN SCHEMA public to dbuser;"
60
user3062149

Wie von @ user3062149 erwähnt, wird dies wahrscheinlich durch den Versuch verursacht, eine Datenbanktabelle zu migrieren, für die Djangos psycopg2-Benutzer nicht der Tabellenbesitzer ist. Wenn Sie beispielsweise in Ihrem Projekt settings.py

DATABASES = {
    'default': {
        'USER': 'my_username',
        # ...

Sie müssen überprüfen, ob die Tabelle, die an der Django-Migration beteiligt ist, my_username gehört. Um dies in psql zu tun, können Sie SELECT * FROM pg_tables ORDER BY tableowner; verwenden. Hierbei wird die Ansicht pg_tables verwendet, die "Zugriff auf nützliche Informationen zu jeder Tabelle in der Datenbank bietet." pg_tables ist ein Teil des Postgres system-Katalogs , dem Ort, an dem ein relationales Datenbankmanagementsystem Schema-Metadaten speichert.

Angenommen, die betreffende Tabelle gehört other_username (nicht my_username).

Um den Besitzer zu aktualisieren, müssen Sie psql mit --username=other_username aufrufen und den Besitzer ändern:

ALTER TABLE public.<table_name> OWNER TO my_username;
1
Brad Solomon