406 Stimmen

PostgreSQL: PostgreSQL-Datenbank über die Kommandozeile löschen

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

Ich melde mich an mit psql -U username und machen dann eine \connect template1 , gefolgt von einer DROP DATABASE databasename; .

Ich erhalte die Fehlermeldung

auf die Datenbank databasename wird von anderen Benutzern zugegriffen

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

577voto

csano Punkte 12748

Sie können die dropdb Befehl von der Befehlszeile aus:

dropdb 'database name'

Beachten Sie, dass Sie ein Superuser oder der Eigentümer der Datenbank sein müssen, um sie löschen zu können.

Sie können auch die pg_stat_activity können Sie sehen, welche Art von Aktivität derzeit in Ihrer Datenbank stattfindet, einschließlich aller inaktiven Prozesse.

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

Beachten Sie, dass Sie ab PostgreSQL v13 die Benutzer automatisch abmelden können mit

DROP DATABASE dbname WITH (FORCE);

o

dropdb -f dbname

131voto

Eugene Punkte 1425

Das hat bei mir funktioniert:

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

für Postgresql früher als 9.2 ersetzen pid con procpid

DROP DATABASE "YourDatabase";

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

84voto

Bohemian Punkte 386825

Versuchen Sie dies. Beachten Sie, dass keine Datenbank angegeben ist - es läuft einfach "auf dem Server".

psql -U postgres -c "drop database databasename"

Wenn das nicht funktioniert, habe ich ein Problem mit Postgres gesehen, das verwaiste vorbereitete Anweisungen beibehält.
Um sie zu säubern, gehen Sie folgendermaßen vor:

SELECT * FROM pg_prepared_xacts;

führen Sie dann für jede ID, die Sie sehen, Folgendes aus:

ROLLBACK PREPARED '<id>';

19voto

Scott Marlowe Punkte 7571

Was sagt die Abfrage "select * from pg_stat_activity;", wenn es heißt, dass Benutzer verbunden sind? Sind die anderen Benutzer außer Ihnen jetzt verbunden? Wenn ja, müssen Sie möglicherweise Ihre Datei pg_hba.conf bearbeiten, um Verbindungen von anderen Benutzern abzulehnen, oder die Anwendung, die auf die pg-Datenbank zugreift, herunterfahren, um sie beenden zu können. Ich habe dieses Problem gelegentlich in der Produktion. Setzen Sie pg_hba.conf so, dass sie zwei Zeilen wie diese enthält:

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) und nun ist die einzige Möglichkeit, sich mit Ihrem Rechner zu verbinden, über lokale Sockets. Ich nehme an, dass Sie unter Linux arbeiten. Falls nicht, müssen Sie in der ersten Zeile etwas anderes als local / ident eingeben, z.B. host ... yourusername.

Jetzt sollten Sie in der Lage sein, das zu tun:

psql postgres
drop database mydatabase;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X