web-dev-qa-db-fra.com

postgresql - impossible de créer une base de données - OperationalError: la base de données source "template1" est en cours d'accès par d'autres utilisateurs

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?

37
Andrius

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

28
Andrius

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 .

34
mvp

Pour résoudre ce problème, je dois déconnecter la connexion à la base de données du pgAdmin III.

9
roxdurazo

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>

8

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.

2
Cloud Artisans

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.

1

Sous Windows, j'ai dû réinstaller PostgreSQL, le redémarrage n'a pas aidé.

0
Tomas Kubes