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?
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
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.
É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
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
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
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!
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é:
La cause de mon problème était juste un mauvais nom d'utilisateur dans l'ancien config/database.yml de Redmine