7
votes

Redémarrez Heroku Postgres Dev DB

J'ai reçu cette erreur dans une application Java Play 2.0.3. Comment puis-je redémarrer Heroku Postgres Dev DB? Je ne pouvais trouver aucune instruction pour redémarrer la DB sur le centre d'aide Heroku. xxx


3 Réponses :


15
votes

Le mésage d'erreur que vous avez là-bas n'est pas une raison pour redémarrer la base de données; Ce n'est pas un problème de base de données. Votre application contient trop de connexions, probablement parce que vous avez oublié de configurer son pool de connexion. Ce n'est pas un problème de serveur DB et vous pouvez le réparer sans redémarrer le serveur DB.

Si vous arrêtez votre application de lecture ou reconfigurez son pool de connexion, le problème disparaîtra.

Une autre option est de Mettez votre instance Heroku en mode de maintenance, puis repartissez-la à nouveau.

puisque Heroku Ne vous permettez pas de vous connecter en tant que superutilisateur (pour de bonnes raisons), vous ne pouvez pas utiliser ce logement superutilisateur réservé pour vous connecter et gérer les connexions telles que vous le feriez avec PostgreSQL normal.

Voir aussi:

Heroku "PSQL : FATAL: Les emplacements de connexion restants sont réservés aux connexions de superutilisateur de non-réplication "

http://wiki.postgresql.org/wiki/number_of_database_connec tions

Si vous êtes un utilisateur non-héroku qui a trouvé ceci:

avec normal PostgreSQL Vous pouvez déconnecter votre client à partir de l'extrémité de fin du serveur à l'aide d'une connexion PostgreSQL à votre serveur. Voyez comment il est dit qu'il y a une fente réservée aux "connexions superutilisateurs"? Connectez-vous à PG en tant que superutilisateur ( postgres par défaut) à l'aide de PGADMIN-III ou PSQL .

Une fois que vous êtes connecté, vous pouvez voir d'autres clients Avec: xxx

Si vous souhaitez terminer chaque connexion, à l'exception de votre propre, vous pouvez exécuter: xxx

Ajouter Et datname = actuel_database et / ou et usename = selon le cas.


2 commentaires

Éventuellement lien pertinent: wiki.postgresql.org/wiki/number_of_database_connections


J'ai été en mesure d'utiliser l'instruction SQL ci-dessus pour mettre fin à des connexions sur une instance Heroku PostgreSQL. Je ne suis pas sûr des autorisations de superutilisateur, mais c'était sur une base de données partagée. Utilisation de la commande HEROKU PG: ​​PSQL J'ai pu exécuter la première instruction SQL et voir toutes les connexions, mais parce que c'était un DB partagé, cette requête avait certaines colonnes bloquées pour toutes les connexions de toutes mais de Notre DB. Ensuite, j'ai pu exécuter la deuxième instruction SQL légèrement modifiée: Sélectionnez PROCPID, PG_TERMINATE_BACKEND (PROCPID) à partir de pg_stat_activity où PROCPID <> PG_BACEND_PID () et USENAME = ''; ';



7
votes

Je pense que j'aurais d'avoir juste ajouté cela en réponse à la réponse précédente, mais je ne pouvais pas comprendre comment faire cela, alors ...

En tant que mise à jour du commentaire de Liron Yahdav dans le thread de la réponse acceptée: Les "utilisateurs non-héroku qui ont trouvé cette solution" Solution a fonctionné pour moi sur une base de données Heroku PostgreSQL Dev, mais avec une légère modification de la requête Liron fournie. Voici ma requête modifiée: Sélectionnez PID, PG_TERMINATE_BACKEND (PID) à partir de pg_stat_activity dans laquelle PID <> pg_backend_pid () et USENAME = '<< YOUR_USERNAME>';

Il semble que PROCPID ait changé de PID.


0 commentaires

4
votes

Il n'y a aucun moyen de redémarrer toute la base de données. Cependant, Heroku offre un moyen simple d'arrêter toutes les connexions qui résout le problème dans la majorité des cas:

Heroku pg: killall


1 commentaires

Cela a résolu mon problème. Aucune requête SQL autre que Select travaillait B4 ceci.