Chaque fois que j'essaye de supprimer la base de données, j'obtiens:
ERROR: database "pilot" is being accessed by other users
DETAIL: There is 1 other session using the database.
Quand j'utilise:
SELECT pg_terminate_backend(pg_stat_activity.pid)
FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'TARGET_DB';
J'ai mis fin à la connexion à partir de cette base de données, mais si j'essaie de supprimer la base de données après cela, quelqu'un se connecte automatiquement à cette base de données et donne cette erreur. Qu'est-ce qui pourrait faire ça? Personne n'utilise cette base de données, sauf moi.
GRANT CONNECT ON DATABASE thedb TO public;
Chaque fois que j'essaye de supprimer la base de données, j'obtiens:
Vous devez d'abord révoquer
Puis utilisez:
Cela fonctionnera sûrement.
la source
J'ai trouvé une solution à ce problème, essayez d'exécuter cette commande dans le terminal
tuer le processus par cette commande
la source
Vérifiez simplement quelle est la connexion, d'où elle vient. Vous pouvez voir tout cela dans:
C'est peut-être votre connexion?
la source
Cela signifie qu'un autre utilisateur accède à la base de données. Redémarrez simplement PostgreSQL. Cette commande fera l'affaire
Essayez ensuite de supprimer la base de données:
Ça fera l'affaire.
la source
Solution pgAdmin 4 utilisant l'interface utilisateur
Activez d'abord l'activité d'affichage sur le tableau de bord si vous ne l'avez pas fait:
Désactivez maintenant tous les processus utilisant la base de données:
Devrait maintenant pouvoir supprimer le fichier db.
la source
Si aucun impact potentiel sur d'autres services de votre machine, il suffit
service postgresql restart
la source
Solution:
1. Arrêtez le serveur Pg 2. Il déconnectera toute connexion active 3. Redémarrez le serveur Pg 4. Essayez votre commande
la source
Aussi simple que cela
la source
Dans mon cas, j'utilise AWS Redshift (basé sur Postgres). Et il semble qu'il n'y ait pas d'autres connexions à la base de données, mais j'obtiens la même erreur.
Dans mon cas, il semble que le cluster de bases de données effectue toujours un traitement sur la base de données, et bien qu'il n'y ait pas d'autres connexions externes / utilisateur, la base de données est toujours utilisée en interne. J'ai trouvé cela en exécutant ce qui suit:
Mon hack consistait donc à écrire une boucle dans mon code, à la recherche de lignes contenant le nom de ma base de données. (bien sûr, la boucle n'est pas infinie et est une boucle endormie, etc.)
Si des lignes sont trouvées, procédez à la suppression de chaque PID, un par un.
Si aucune ligne n'est trouvée, procédez à la suppression de la base de données
Remarque: Dans mon cas, j'écris des tests unitaires / système Java, où cela pourrait être considéré comme acceptable. Ce n'est pas acceptable pour le code de production.
Voici le hack complet, en Java (ignorez mes classes de test / utilitaires).
la source
À mon avis, il y a des requêtes inactives en cours d'exécution dans le backgroud.
Remarque: la suppression d'une requête de sélection n'a aucun impact négatif
la source
REVOKE CONNECT
n'empêchera pas les connexions du propriétaire de la base de données ou du superutilisateur. Donc, si vous ne voulez pas que quiconque connecte la base de données, la commande follow peut être utile.Puis utilisez:
la source
Bien que j'ai trouvé les deux réponses aux votes complémentaires utiles à d'autres occasions, aujourd'hui, le moyen le plus simple de résoudre le problème était de réaliser que PyCharm pouvait garder une session ouverte, et si je
Stop
cliquais dans PyCharm, cela pourrait aider. Avec pgAdmin4 ouvert dans le navigateur, je l'ai fait et j'ai presque immédiatement vu les statistiques des sessions de base de données tomber à 0, auquel cas j'ai pu supprimer la base de données.la source
Dans macOS, essayez de redémarrer la base de données postgresql via la console à l'aide de la commande:
la source
Dans le terminal, essayez cette commande:
vous verrez comme:
Le troisième nombre (3645) est PID.
Vous pouvez supprimer ceci
Et après cela, démarrez votre connexion PostgreSQL.
Démarrez manuellement:
la source