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?

71
demandé sur newUserNameHere 2012-08-13 12:56:45

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

154
répondu Ashton Thomas 2018-08-17 07:26:58

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 .

11
répondu Craig Ringer 2012-08-13 23:50:26

É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

  1. connexion à https://addons.heroku.com
  2. recherche" Heroku Postgres "
  3. choisir un plan et une application
  4. 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
8
répondu tomaszbak 2014-04-30 11:10:28

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
5
répondu manish_s 2015-09-05 03:52:03

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!

2
répondu user991562 2012-10-18 21:35:34

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:

  1. j'ai fait une sauvegarde de L'ancienne application Redmine et de la base de données.
  2. j'ai déployé une nouvelle version de Redmine - il a fonctionné parfaitement
  3. 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

2
répondu Rapekaz 2013-11-20 16:24:40