Wie kann ich alle Tabellen in PostgreSQL über die Kommandozeile löschen?
I nicht die Datenbank selbst löschen möchten, nur alle Tabellen und alle darin enthaltenen Daten.
Wie kann ich alle Tabellen in PostgreSQL über die Kommandozeile löschen?
I nicht die Datenbank selbst löschen möchten, nur alle Tabellen und alle darin enthaltenen Daten.
Das ist eine wirklich interessante Frage, und Sie werden sie auf vielfältige Weise beantworten können:
Hier haben wir im Allgemeinen eine public
Schema standardmäßig. Ich verwende es also als Instanz.
-- Recreate the schema
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
-- Restore default permissions
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
Wenn Sie PostgreSQL 9.3 oder höher verwenden, müssen Sie möglicherweise auch die Standard-Grants wiederherstellen.
Vorteile:
Dadurch wird ein ganzes Schema bereinigt und als neues Schema erstellt.
Nachteile:
Sie werden auch andere Einheiten verlieren, wie Functions
, Views
, Materialized views
, usw.
pg_tables
Tisch.PostgreSQL speichert alle Tabellen in seiner Record-Tabelle namens pg_table
.
SELECT
'DROP TABLE IF EXISTS "' || tablename || '" CASCADE;'
from
pg_tables WHERE schemaname = 'public';
Wie Sie sehen können, durch die Verwendung von subquery, Wir können die gesamte Tabellen aus dem Schema zu entfernen.
Vorteile:
Wenn die anderen Datenentitäten wichtig sind und Sie nur Tabellen aus dem Schema löschen möchten, ist dieser Ansatz sehr hilfreich für Sie.
Melden Sie sich mit dem Benutzer postgres auf Ihrer Shell an
$ sudo -u postgres psql
Verbinden Sie Ihre Datenbank
$ \c mydatabase
Fügen Sie diese Befehle ein:
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
Hinweis: Diese Befehle ähneln dem ersten Punkt, so dass die Vor- und Nachteile dieselben bleiben.
Die folgenden Schritte könnten hilfreich sein (für Linux-Benutzer):
Geben Sie zunächst die postgres
Eingabeaufforderung durch folgenden Befehl:
sudo -u postgres psql
Geben Sie die Datenbank mit diesem Befehl ein (mein Datenbankname ist: maoss
):
\c maoss
Geben Sie nun den Befehl zum Löschen aller Tabellen ein:
DROP SCHEMA public CASCADE;
CREATE SCHEMA public;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO public;
Verlassen Sie nun die psql
durch folgenden Befehl:
\q
In Anlehnung an Pablo und LenW hier ein Einzeiler, der sowohl bei der Vorbereitung als auch bei der Ausführung alles richtig macht:
psql -U $PGUSER $PGDB -t -c "select 'drop table \"' || tablename || '\" cascade;' from pg_tables where schemaname = 'public'" | psql -U $PGUSER $PGDB
NB: entweder einstellen oder ersetzen $PGUSER
y $PGDB
mit den von Ihnen gewünschten Werten
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.