2013-01-17 1 views
23

Ich habe mich bei Quellendatenbankvorlage1 angemeldet und kann jetzt keine Datenbank erstellen. Wenn ich versuche, Datenbank zu erstellen, bekomme ich diesen Fehler:postgresql - Datenbank kann nicht erstellt werden - OperationalError: Quellendatenbank "template1" wird von anderen Benutzern aufgerufen

OperationalError: source database "template1" is being accessed by other users 
DETAIL: There are 5 other session(s) using the database. 

Jedes Mal, wenn ich zu template1 anmelden, verwende ich ‚exit‘ Befehl, abzumelden, aber wie Sie es abmelden und Nummer nicht sehen können nicht von Sitzungen erhöht jedes Mal wenn ich mich anmelde. Gibt es eine Möglichkeit zu erzwingen, jede Verbindung zu template1 zu trennen, die sich jetzt angemeldet hat?

+0

Es gibt keinen 'exit' Befehl in' psql'. Der Befehl zum Verlassen von 'psql' ist' \ q' (und Sie sollten sich nicht einloggen oder die Template-Datenbank verwenden) –

+0

Ich musste mich anmelden, weil ich das Schema public löschen und neu erstellen musste, um eines zu beheben Fehler. – Andrius

+0

Auch danke für die Antwort. Jetzt wird die Anzahl der eingeloggten Benutzer nicht erhöht, aber es bleiben 5 Benutzer verbunden. Wie erzwingen Sie diese Verbindungen zu beenden? – Andrius

Antwort

21

Das half mir mein Problem zu lösen:

SELECT *, pg_terminate_backend(procpid) 
FROM pg_stat_activity 
WHERE usename='username'; 

--Use pid if PostgreSQL version 9.2 or above. 

ich alle aktiven Verbindungen zu template1 beendet und die Datenbank erstellen könnte normalerweise

+2

9.3 sagt mir 'Spalte" Procpid "existiert nicht –

+5

@ dan-Klasson verwenden' pid' – Andrius

+0

Also @Soumya wie hast du die aktiven Verbindungen beendet? –

27

Die Datenbank template1 existiert nur, um Barebone-Struktur zu schaffen, um eine weitere leere Datenbank zu erstellen. Sie sollten nie Anmeldung an template1, sonst werden Sie Probleme haben.

Wahrscheinlich einfachste Lösung für Sie ist, PostgreSQL Server-Prozess neu zu starten, und erneut anmelden. Die Datenbank, die immer vorhanden sein sollte und sich sicher anmelden kann, ist postgres.

Wenn der Neustart nicht möglich ist, können Sie eine andere Notfallschablonendatenbank verwenden: template0.

Standardmäßig ist diese Aussage:

CREATE DATABASE dbname; 

entspricht:

CREATE DATABASE dbname TEMPLATE template1; 

Wenn template1 nicht vorhanden oder beschädigt ist, Sie template0 als letztes Mittel verwenden:

CREATE DATABASE dbname TEMPLATE template0; 

Sie können mehr über Template-Datenbanken lesen here.

+0

Ich wollte nicht einloggen, aber unsere ERP-Unterstützung sagte uns, es zu tun, um einen Fehler zu beheben .. :) – Andrius

+0

Von doc link: CREATE DATABASE wird fehlschlagen, wenn eine andere Verbindung zu template1 existiert. Sie können den letzten Ausweg 'template0' verwenden:' CREATE DATABASE dbname TEMPLATE template0' – mvp

+0

In der älteren Postgres-Version gab es einen Grund, sich in die Template-Datenbank einzuloggen: Erzeuge die plpgsql-Sprache dort, damit jede neue Datenbank sie automatisch bekommt. –

7

Um dies zu lösen, ich habe die Datenbankverbindung vom pgAdmin III trennen .

+0

Oder einfach pgAdmin ausschalten funktioniert für mich. –

3

Sie können auch versuchen, den aktuellen Prozess-Thread von dem Terminal

Suche den Prozess zu beenden:

sudo ps aux | grep template1 

den Prozess beenden:

sudo kill -9 < Ihre Prozess-ID>

0

Sie können es versuchen um den postgresql-Dienst neu zu starten, der im Hintergrund ausgeführt wird.

1

Dieses Problem kann auftreten, wenn Sie (psql template1 oder psql template0) in template1 und template0 Datenbank und Ausgang mit folgendem Befehl angemeldet haben.

Ctrl + z

bessere Art und Weise gibt es von db unter Postgres verwenden Sie den Befehl dann Problem nicht schaffen wird:

\ q + eingeben

2 Lösungen Es gibt, wenn das Problem haben .

Lösung - 1

Restart posgres Service wie.

sudo Service postgresql restart

Lösung - 2

sudo ps aux | grep template1

stellen Sie sicher, nicht löschen, diese Prozesse

Postgres 8363 0,0 0,0 111.760 7.832 pts/11 T 9.49 00.00 /usr/lib/postgresql/9.5/bin/psql template1 ankit 18119 0.0 0.0 14224 976 Punkte/14 S + 12:33 0:00 grep --color = auto template1

rest des Prozesses sollte mit dem Befehl unten getötet werden.

sudo kill -9

Jetzt versuchen db wieder zu erstellen.

Ich hoffe, dies hilft Ihnen.

Ankit H Gandhi.

Verwandte Themen