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?

28
demandé sur Andrius 2013-01-17 12:18:04

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.

30
répondu mvp 2013-01-17 08:38:08

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

25
répondu Andrius 2017-05-26 20:49:56

pour résoudre cela, je dois déconnecter la connexion de la base de données pgAdmin III.

9
répondu roxdurazo 2015-07-28 16:25:56

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 >

4
répondu DASADIYA CHAITANYA 2016-05-14 10:23:21

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.

1
répondu gorus 2018-03-22 00:44:33

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.

0
répondu Er.Ankit H Gandhi 2017-11-01 09:33:26

vous pouvez essayer de redémarrer le service postgresql qui tourne en arrière-plan.

-1
répondu ezzadeen 2017-02-17 19:12:31