it-swarm.com.de

Löschen Sie die PostgreSQL-Datenbank über die Befehlszeile

Ich versuche, meine Datenbank zu löschen und über die Befehlszeile eine neue zu erstellen.

Ich logge mich mit psql -U username ein und mache dann einen \connect template1, gefolgt von einem DROP DATABASE databasename;.

Ich bekomme den Fehler

auf Datenbankdatenbankname wird von anderen Benutzern zugegriffen

Ich habe Apache heruntergefahren und es erneut versucht, aber ich erhalte immer noch diesen Fehler. Mache ich etwas falsch?

284
iman453

Sie können den Befehl dropdb über die Befehlszeile ausführen:

dropdb 'database name'

Beachten Sie, dass Sie ein Superuser oder der Datenbankbesitzer sein müssen, um es löschen zu können.

Sie können auch die Ansicht pg_stat_activity überprüfen, um festzustellen, welche Art von Aktivität derzeit für Ihre Datenbank ausgeführt wird, einschließlich aller inaktiven Prozesse.

SELECT * FROM pg_stat_activity WHERE datname='database name';
410
csano

Das hat bei mir funktioniert:

select pg_terminate_backend(pid) from pg_stat_activity where datname='YourDatabase';

für postgresql vor 9.2 ersetzen Sie pid durch procpid

DROP DATABASE "YourDatabase";

http://blog.gahooa.com/2010/11/03/how-to-force-drop-a-postgresql-database-by-killing-off-connection-processes/

107
Eugene

Versuche dies. Hinweis: Es wurde keine Datenbank angegeben. Sie wird nur "auf dem Server" ausgeführt.

psql -U postgres -c "drop database databasename"

Wenn das nicht funktioniert, habe ich ein Problem mit Postgres gesehen, die verwaiste vorbereitete Anweisungen behalten.
Gehen Sie folgendermaßen vor, um sie zu bereinigen:

SELECT * FROM pg_prepared_xacts;

führen Sie dann für jede angezeigte ID Folgendes aus:

ROLLBACK PREPARED '<id>';
61
Bohemian

Was bedeutet die Abfrage "select * from pg_stat_activity", wenn angegeben wird, dass Benutzer verbunden sind? sagen? Sind die anderen Benutzer außer Ihnen jetzt verbunden? In diesem Fall müssen Sie möglicherweise Ihre Datei pg_hba.conf bearbeiten, um Verbindungen von anderen Benutzern abzulehnen, oder die App beenden, die auf die pg-Datenbank zugreift, um sie löschen zu können. Ich habe dieses Problem gelegentlich in der Produktion. Setze pg_hba.conf so, dass es zwei Zeilen wie diese gibt:

local   all         all                               ident
Host    all         all         127.0.0.1/32          reject

und weisen Sie pgsql an, neu zu laden oder neu zu starten (d. h. entweder Sudo /etc/init.d/postgresql reload oder pg_ctl reload). Die Verbindung zu Ihrem Computer kann jetzt nur über lokale Sockets hergestellt werden. Ich nehme an, du bist unter Linux. Wenn nicht, muss dies möglicherweise auf etwas anderes als local/ident in der ersten Zeile geändert werden, auf etwas wie Host ... yourusername.

Jetzt solltest du in der Lage sein:

psql postgres
drop database mydatabase;
15
Scott Marlowe