PGError: erreur: permission refusée pour la relation (lors de L'utilisation de Heroku)
j'ai récemment parcouru 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 ceci:
PGError: ERREUR: permission denied pour relation
une idée de ce que je devrais faire pour le réparer?
6 réponses
j'ai eu un problème similaire, mais la cause fondamentale était que mon application pointait vers l'ancienne base de données dev qui avait dépassé sa limite de 10.000 lignes.
bien que j'ai créé une nouvelle base de données de base et ai tout sauvegardé, l'application pointait toujours l'ancien dev DB.
heroku pg:info
Vérifier les lignes: 10300/10000 (alors vous avez un problème)
vous aurez besoin de
Un) Créer un nouveau DB avec plus de lignes (de base ou de la "Production" ceux - > Heroku semble forcer une mise à niveau pour faire plus d'argent errrrr)
2) sauvegarder l'ancien DB en utilisant pgbackups: heroku pgbackups:capture SMALL_DB_NAME
3) restaurer la sauvegarde dans la nouvelle base de données: heroku pgbackups:restore BIG_DB_NAME BACKUP_ID
(voir liens ci-dessous pour plus de détails))
4) promouvoir le nouveau DB à la Primaire pour l'application: heroku pg:promote BIG_DB_NAME
peut toujours utiliser:
heroku maintenance:on
(pour désactiver l'application lors de la mise à jour)
heroku maintenance:off
heroku pg:info
(pour vérifier le statut)
si c'est le problème, vous pouvez vérifier: https://devcenter.heroku.com/articles/heroku-postgres-starter-tier https://devcenter.heroku.com/articles/migrating-from-shared-database-to-heroku-postgres
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 PostgreSQL ou de problèmes, mais que vous êtes et non en utilisant Heroku, s'il vous plaît chercher 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 pas émis de message explicite GRANT
déclarations pour lui donner accès à eux. Sans voir exactement ce que vous avez couru quand vous avez migré, il est difficile d'en dire plus - et Heroku cache beaucoup des intérieurs de toute façon.
voyons quelle est la situation actuelle. Essayez de vous connecter avec psql
et de lancer:
\dp the_problem_table
et montrer les permissions rapportées. Afficher aussi le résultat de:
SHOW current_user;
exécuter à partir de psql
et quand exécuter SQL requête à partir de l'intérieur de votre application.
modifiez votre question pour ajouter cette information et le texte complet et exact du message d'erreur que vous obtenez .
Étapes basées sur Ashton en réponse à la mise à niveau de Dev (10k lignes de limite) à la Base (10M lignes de limite)
vérifier les lignes db excedededed limit
heroku pg:info
désactiver l'application et les travailleurs pour assurer aucun changement de db pendant la mise à niveau de db
heroku maintenance:on
heroku ps:scale worker=0
si vous n'avez pas pgbackups
heroku addons:add pgbackups
sauvegarde de la base de données et obtenir une sauvegarde id
heroku pgbackups:capture
ajouter db avec interface web
- connexion à https://addons.heroku.com
- recherche" Heroku Postgres "
- choisir un plan et une application
- ajouter
voir la configuration d'heroku, vous devriez voir la nouvelle URL de la base de données
heroku config --remote heroku
restauration de sauvegarde à nouveau db
heroku pgbackups:restore NEW_DB_URL BACKUP_ID
change 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 les privilèges insert immédiatement. Dans ce cas, supprimez les lignes supplémentaires et lancez heroku pg:info
après cela. 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 le DB existant dans un nouveau et de définir le nouveau comme le DB 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 rangées.
cette réponse expliquait comment énumérer le nombre de lignes dans chaque tableau: 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 listés sur le tableau de bord heroku pour votre application!
j'ai eu le même problème sur mon application de Redmine:
PG::InsufficientPrivilege: ERROR: permission denied for relation settings
: SELECT "settings".* FROM "settings" WHERE "settings"."name" = 'plugin_redmine_wktime' LIMIT 1
mes pas étaient:
- j'ai fait une sauvegarde de L'ancienne application Redmine et de la base de données.
- j'ai déployé une nouvelle version de Redmine - il a fonctionné parfaitement
- j'ai restauré Old Redmine comme serveur de développement et j'ai eu une erreur quand j'ai essayé d'accéder à la page web principale.
la cause de mon le problème était dans le mauvais nom d'utilisateur dans la base de données de Redmine.yml