Je me suis connecté au modèle de base de données source1 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 se déconnecter, mais comme vous pouvez le voir, il ne se déconnecte pas et le nombre de sessions augmente à chaque connexion. Existe-t-il un moyen de forcer la déconnexion de chaque connexion à template1 qui s'est connectée maintenant?
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 interrompu toutes les connexions actives à template1 et j'ai pu créer la base de données normalement
Base de données template1
existe uniquement pour fournir une structure barebone pour créer une autre base de données vide. Vous ne devez jamais vous connecter à 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 reconnecter. La base de données qui doit toujours exister et se connecter en toute sécurité est postgres
.
Si le redémarrage n'est pas une option, vous pouvez utiliser une autre base de données de modèles d'urgence: template0
.
Par défaut, cette déclaration:
CREATE DATABASE dbname;
est équivalent à:
CREATE DATABASE dbname TEMPLATE template1;
Si template1
n'est pas disponible ou corrompu, vous pouvez utiliser template0
en dernier recours:
CREATE DATABASE dbname TEMPLATE template0;
Vous pouvez en savoir plus sur les bases de données de modèles ici .
Pour résoudre ce problème, je dois déconnecter la connexion à la base de données du pgAdmin III.
Vous pouvez également essayer de terminer le thread de processus actuel par le terminal
Rechercher le processus:
Sudo ps aux | grep template1
Tuez le processus:
Sudo kill -9 <votre identifiant de processus>
J'ai un script qui se connecte à une base de données et y exécute diverses opérations, certaines nécessitant que personne d'autre ne soit connecté. J'ai modifié la réponse de @ Andrius pour ne pas mettre fin à la connexion de mon script, mais plutôt pour tout le monde:
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid <> pg_backend_pid();
À partir de docs : pg_backend_pid()
est l'ID de processus du processus serveur attaché à la session en cours.
Ce problème se produit lorsque vous avez enregistré (psql template1 ou psql template) dans la base de données template1 et template0 et quittez à l'aide de la commande ci-dessous.
Ctrl + z
Il existe une meilleure façon d'utiliser db en dessous de la commande postgres alors le problème ne se créera pas:
\ q + enter
Il y a 2 solutions, si vous avez un problème.
Solution - 1
Redémarrez le service posgres comme.
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
le reste du processus doit être tué en utilisant la commande ci-dessous.
Sudo kill -9
Essayez maintenant de recréer db.
J'espère que cela vous aidera.
Ankit H Gandhi.
Sous Windows, j'ai dû réinstaller PostgreSQL, le redémarrage n'a pas aidé.