postgresql - ne peut pas créer de base de données-OperationalError: la base de données source "template1" est accessible par d'autres utilisateurs
je me suis connecté à la base de données source template1 et maintenant je ne peux pas créer de base de données. Lorsque j'essaie de créer une base de données, j'obtiens cette erreur:
OperationalError: source database "template1" is being accessed by other users
DETAIL: There are 5 other session(s) using the database.
chaque fois que je me connecte à template1, j'utilise la commande 'exit' pour me déconnecter, mais comme vous pouvez le voir, il ne se déconnecte pas et le nombre de sessions augmente chaque fois que je me connecte. Est-il un moyen pour forcer la déconnexion de chaque connexion à l'template1 que connecté maintenant?
7 réponses
Base de données template1
n'existe que pour fournir une structure barebone pour créer une autre base de données vide. Vous devez vous jamais connexion template1
, sinon vous aurez des problèmes.
la solution la plus simple pour vous est probablement de redémarrer le processus du serveur PostgreSQL et de vous connecter à nouveau. La base de données qui devrait toujours exister et qui est sûre pour se connecter est postgres
.
si redémarrer n'est pas une option, vous pouvez utiliser une autre base de données de template d'urgence: template0
.
Par défaut, cette déclaration:
CREATE DATABASE dbname;
est l'équivalent de:
CREATE DATABASE dbname TEMPLATE template1;
Si template1
n'est pas disponible ou endommagé, vous pouvez utiliser template0
en dernier recours:
CREATE DATABASE dbname TEMPLATE template0;
vous pouvez en savoir plus sur les bases de données de template ici.
Cela m'a aidé à résoudre mon problème:
SELECT *, pg_terminate_backend(procpid)
FROM pg_stat_activity
WHERE usename='username';
--Use pid if PostgreSQL version 9.2 or above.
j'ai terminé toutes les connexions actives avec template1 et j'ai pu créer la base de données normalement
pour résoudre cela, je dois déconnecter la connexion de la base de données pgAdmin III.
Vous pouvez aussi essayer de terminer le processus en cours par le Terminal
Rechercher dans le Processus :
sudo ps aux | grep template1
Tuer le Processus :
sudo kill -9 < votre id de processus >
j'ai un script qui se connecte à une base de données et effectue diverses opérations sur elle, certains exigeant que personne d'autre n'est connecté. J'ai modifié la réponse de @Andrius non pas pour supprimer la connexion de mon script, mais plutôt pour supprimer celle de tout le monde:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
docs:pg_backend_pid()
est l'identifiant du processus du serveur attaché à la session en cours.
ce problème se produit lorsque vous avez ouvert une session ( psql template1 ou psql template0) dans la base de données template1 et template0 et quitter en utilisant la commande ci-dessous.
Ctrl + z
Meilleur moyen existe pas de db utiliser en dessous de postgres commande puis le problème ne va pas créer:
\q + entrée
il y a 2 solutions, S'il y a un problème.
Solution-1
redémarrage Postgres service like.
sudo service postgresql restart
Solution - 2
sudo ps aux / grep template1
assurez-vous de ne pas supprimer ce processus
postgres 8363 0,0 0,0 111760 7832 pts/11 T 09:49 0: 00 / usr/lib/postgresql / 9.5 / bin/psql template1 ankit 18119 0,0 0,0 14224 976 pts / 14 S+ 12: 33 0: 00 grep --color=auto template1
reste du processus devrait être tuer en utilisant la commande ci-dessous.
sudo kill -9
maintenant, essayez de créer à nouveau db.
Espérons que cette aide vous.
Ankit H Gandhi.
vous pouvez essayer de redémarrer le service postgresql qui tourne en arrière-plan.