web-dev-qa-db-fra.com

PGError: ERREUR: autorisation refusée pour la relation (lors de l'utilisation de Heroku)

J'ai récemment suivi le processus de migration de la base de données comme indiqué ici:

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

Maintenant, je vois un certain nombre d'erreurs dans les journaux comme celui-ci:

PGError: ERREUR: autorisation refusée pour la relation

Des idées sur ce que je dois faire pour y remédier?

74
suttree

J'ai eu un problème similaire, mais la cause principale était que mon application pointait vers l'ancienne base de données de développement qui avait dépassé sa limite de 10 000 lignes.

Bien que j'ai créé une nouvelle base de données de base et tout sauvegardé, l'application pointait toujours l'ancienne base de données de développement.

heroku pg:info

Vérifiez pour voir les lignes: 10300/10000 (alors vous avez un problème)

Tu devras

1) Créer une nouvelle base de données avec plus de lignes (de base ou "Production" -> Heroku semble forcer une mise à niveau pour gagner plus d'argent errrrrr)

2) sauvegarder l'ancienne base de données à l'aide de pgbackups: heroku pg:backups:capture SMALL_DB_NAME

3) restaurer la sauvegarde sur la nouvelle base de données: heroku pg:backups:restore BACKUP_ID BIG_DB_NAME (voir les liens ci-dessous pour plus de détails)

4) PROMOUVOIR la nouvelle base de données sur le serveur principal de l'application: heroku pg:promote BIG_DB_NAME

peut toujours utiliser:

heroku maintenance:on (pour désactiver l'application pendant la mise à jour)


heroku maintenance:off


heroku pg:info (pour vérifier le statut)

Si tel est le problème, vous pouvez vérifier: https://devcenter.heroku.com/articles/heroku-postgres-starter-tierhttps: //devcenter.heroku. com/articles/migration-de-base-de-partage-vers-heroku-postgres

160
Ashton Thomas

MISE À JOUR: La réponse d'Ashton le cloue dans cette situation, qui est très spécifique à Heroku. Si vous avez trouvé cela à partir d'une recherche de messages d'erreur ou de problèmes PostgreSQL mais que vous utilisez pas Heroku, veuillez rechercher d'autres questions plus susceptibles de s'appliquer à votre situation.


À première vue, l'ID utilisateur PostgreSQL avec lequel vous vous connectez n'est pas le propriétaire de vos tables et vous n'avez émis aucune instruction GRANT explicite pour lui donner accès à ces tables. Sans voir exactement ce que vous avez exécuté lorsque vous avez migré, il est difficile d'en dire plus - et Heroku cache tout de même de nombreux éléments internes.

Voyons quelle est la situation actuelle. Essayez de vous connecter avec psql et d'exécuter:

\dp the_problem_table

et montrer les autorisations signalées. Afficher également le résultat de:

SHOW current_user;

exécuter à partir de psql et lorsqu'il est exécuté en tant que requête SQL depuis l'intérieur de votre application.

Modifiez votre question pour ajouter ces informations et le texte complet et exact du message d'erreur que vous obtenez.

11
Craig Ringer

Étapes basées sur la réponse d'Ashton pour passer de Dev (limite de 10 000 lignes) à Basique (limite de 10 millions de lignes)

vérifier la limite dépassée des lignes de base de données

heroku pg:info

désactiver l'application et les travailleurs pour garantir qu'aucune modification de la base de données pendant la mise à niveau de la base de données

heroku maintenance:on
heroku ps:scale worker=0

si vous n'avez pas de pgbackups

heroku addons:add pgbackups

base de données de sauvegarde et obtenir l'ID de sauvegarde

heroku pg:backups:capture

ajouter db avec interface web

  1. connectez-vous à https://addons.heroku.com
  2. rechercher "Heroku Postgres"
  3. sélectionner le plan et l'application
  4. ajoutez-le

afficher la configuration Heroku, vous devriez voir une nouvelle URL de base de données

heroku config --remote heroku

restaurer la sauvegarde sur une nouvelle base de données

heroku pg:backups:restore BACKUP_ID NEW_DB_URL

changer DATABASE_URL

heroku pg:promote NEW_DB_URL

activer l'application et les travailleurs

heroku maintenance:off
heroku ps:scale worker=1
9
tomaszbak

Après avoir supprimé les lignes supplémentaires, vous ne récupérerez pas immédiatement les privilèges d'insertion. Dans ce cas, supprimez les lignes supplémentaires et exécutez simplement heroku pg:info après ça. Cela rafraîchira les privilèges de votre base de données et vous obtiendrez l'accès en quelques minutes. Il n'est pas nécessaire de cloner la base de données existante dans une nouvelle et de définir la nouvelle en tant que base de données de votre application.

$ 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
manish_s

J'étais dans une situation où j'ai dépassé la limite de nombre de lignes.

Cette réponse a expliqué comment répertorier le nombre de lignes dans chaque table: http://stackoverflow.com/questions/12701711/heroku-row-count-incorrect

Très précieux à savoir.

Vous pouvez accéder à la console psql via le terminal, les paramètres de connexion sont répertoriés sur le tableau de bord Heroku pour votre application!

2
user991562

J'ai eu le même problème sur mon application Redmine:

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

Mes étapes ont été:

  1. J'ai fait une sauvegarde de l'ancienne application et base de données Redmine.
  2. J'ai déployé une nouvelle version de Redmine - cela fonctionnait parfaitement
  3. J'ai restauré l'ancien Redmine en tant que serveur de développement et j'ai reçu une erreur lorsque j'ai essayé d'accéder à la page Web principale.

La cause de mon problème était juste un mauvais nom d'utilisateur dans l'ancien config/database.yml de Redmine

2
Rapekaz