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

Je suis récemment passé par le processus de migration de la firebase database, 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 ceci:

PGError: ERREUR: permission refusée pour la relation

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

J’avais un problème similaire, mais la raison en était que mon application indiquait l’ancienne firebase database dev qui avait dépassé la limite de 10 000 lignes.

Bien que j’ai créé une nouvelle firebase database et que je sauvegarde tout, l’application indiquait toujours l’ancienne firebase database 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 un nouveau DB avec plus de lignes (Basic ou “Production” -> Heroku semble forcer une mise à niveau pour faire plus d’argent)

2) sauvegarder l’ancienne firebase database en utilisant pgbackups: heroku pgbackups:capture SMALL_DB_NAME

3) restaurer la sauvegarde sur la nouvelle firebase database: heroku pgbackups:restore BIG_DB_NAME BACKUP_ID (voir les liens ci-dessous pour plus de détails)

4) PROMOUVOIR le nouveau DB au primaire pour 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 consulter: https://devcenter.heroku.com/articles/heroku-postgres-starter-tier https://devcenter.heroku.com/articles/migrating-from-shared-database -à-heroku-postgres

MISE À JOUR: La réponse d’Ashton se situe 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 n’utilisez pas Heroku, veuillez rechercher d’autres questions plus susceptibles de s’appliquer à votre situation.


À titre indicatif, 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 access. Sans voir exactement ce que vous avez couru lorsque vous avez migré, il est difficile d’en dire plus – et Heroku cache de nombreuses choses de toute façon.

Examinons quelle est la situation actuelle. Essayez de vous connecter avec psql et en cours d’exécution:

 \dp the_problem_table 

et montrer les permisions rapscopes. 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 votre application.

Modifiez votre question pour append cette information et le texte complet du message d’erreur que vous obtenez .

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

vérifier la limite des lignes db

 heroku pg:info 

Désactivez l’application et les employés pour éviter toute modification de la firebase database pendant la mise à niveau de la firebase database

 heroku maintenance:on heroku ps:scale worker=0 

si vous n’avez pas de pgbackups

 heroku addons:add pgbackups 

firebase database de sauvegarde et obtenir l’ID de sauvegarde

 heroku pgbackups:capture 

append une firebase database avec l’interface Web

  1. Connectez-vous à https://addons.heroku.com
  2. rechercher “Heroku Postgres”
  3. sélectionner le plan et l’application
  4. l’append

voir la configuration de heroku, vous devriez voir la nouvelle URL de la firebase database

 heroku config --remote heroku 

restaurer la sauvegarde sur la nouvelle firebase database

 heroku pgbackups:restore NEW_DB_URL BACKUP_ID 

changer DATABASE_URL

 heroku pg:promote NEW_DB_URL 

activer l’application et les travailleurs

 heroku maintenance:off heroku ps:scale worker=1 

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 lancez heroku pg:info après cela. Cela permettra d’actualiser les privilèges de votre firebase database et vous obtiendrez l’access en quelques minutes. Il n’est pas nécessaire de cloner la firebase database existante dans une nouvelle et de définir la nouvelle comme firebase database 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 

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

Cette réponse explique 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 parameters de connexion sont listés sur le tableau de bord heroku pour votre application!

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 pas étaient:

  1. J’ai fait une sauvegarde de l’ancienne application et de la firebase database Redmine.
  2. J’ai déployé une nouvelle version de Redmine – cela fonctionnait parfaitement
  3. J’ai restauré l’ancienne Redmine en tant que serveur de développement et j’ai eu une erreur lorsque j’ai essayé d’accéder à la page Web principale.

La cause de mon problème était simplement un nom d’utilisateur erroné dans l’ancien fichier config / database.yml de Redmine.