79 votes

PGError : ERROR : permission denied for relation (lors de l'utilisation de Heroku)

J'ai récemment suivi le processus de migration de la base de données tel que décrit 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 : ERROR : permission refusée pour la relation

Avez-vous une idée de ce que je dois faire pour le réparer ?

0 votes

J'ai eu la même chose. J'ai supprimé des lignes dans la base de données sur Heroku et j'ai dû attendre quelques minutes, puis j'ai pu migrer la base de données.

170voto

Ashton Thomas Points 1311

J'ai eu un problème similaire mais la cause première é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'aie créé une nouvelle base de données de base et tout sauvegardé, l'application pointait toujours vers l'ancienne base de données de développement.

heroku pg:info

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

Vous devrez

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

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

3) restaurer la sauvegarde sur la nouvelle BD : 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 comme primaire pour l'application : heroku pg:promote BIG_DB_NAME

peuvent toujours être utilisés :

heroku maintenance:on (pour désactiver l'application pendant 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

1 votes

Merci Ashton - le fait de repasser par tout ça a parfaitement fonctionné.

0 votes

Le mien dit : Rows : 57845/10000 (Accès en écriture révoqué)

0 votes

Oui, ça vous ferait dépasser la limite. On dirait que vous allez devoir faire une mise à niveau, et j'espère que ces instructions vous aideront !

11voto

Craig Ringer Points 72371

MISE À JOUR : la réponse d'Ashton est parfaite dans cette situation, qui est très spécifique à Heroku. Si vous avez trouvé ceci à partir d'une recherche de messages d'erreur ou de problèmes PostgreSQL mais que vous êtes no utilisant Heroku, veuillez chercher d'autres questions plus susceptibles de s'appliquer à votre situation.


A priori, l'ID de l'utilisateur PostgreSQL avec lequel vous vous connectez n'est pas le propriétaire de vos tables, et vous n'avez pas émis de code d'accès explicite. GRANT pour lui permettre d'y accéder. Sans voir exactement ce que vous avez exécuté lors de la migration, il est difficile d'en dire plus - et Heroku cache de toute façon beaucoup d'éléments internes.

Faisons le point sur la situation actuelle. Essayez de vous connecter avec psql et de courir :

\dp the_problem_table

et montrer les permissions rapportées. Montrez également le résultat de :

SHOW current_user;

courir à partir de psql et lorsqu'il est exécuté comme une requête SQL à partir de votre application.

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

0 votes

Heroku ne permet pas d'accès de bas niveau à sa base de données.

0 votes

... et rien ici n'est "de bas niveau".

0 votes

psql dans ce contexte de bas niveau

11voto

tomaszbak Points 1438

Étapes basées sur la réponse d'Ashton pour passer de Dev (limite de 10k lignes) à Basic (limite de 10M lignes)

vérifier les lignes de la base de données qui ont dépassé la limite

heroku pg:info

Désactiver l'application et les travailleurs pour s'assurer qu'il n'y a pas de changement de base de données pendant la mise à jour 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

sauvegarde de la base de données et obtention de l'identifiant de sauvegarde

heroku pg:backups:capture

ajouter une base de données avec une interface web

  1. connexion à https://addons.heroku.com
  2. Cherchez "Heroku Postgres".
  3. choisir le plan et l'application
  4. ajoutez-le

voir la configuration de heroku, vous devriez voir la nouvelle URL de la base de données.

heroku config --remote heroku

restauration de la sauvegarde vers 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

0 votes

Il est peut-être utile de mentionner que la commande a changé depuis heroku pgbackups:capture à heroku pg:backups:capture . Remarquez le point-virgule entre pg:backups

2voto

user991562 Points 46

Je me suis trouvé dans une situation où j'ai dépassé la limite du nombre de lignes.

Cette réponse explique comment lister le nombre de lignes dans chaque tableau : http://stackoverflow.com/questions/12701711/heroku-row-count-incorrect

Très utile à 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 de votre application !

2voto

Rapekaz Points 1

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 Redmine et de la base de données.
  2. J'ai déployé une nouvelle version de Redmine - cela a parfaitement fonctionné.
  3. J'ai restauré l'ancien Redmine comme 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 juste un mauvais nom d'utilisateur dans l'ancien fichier config/database.yml de Redmine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X