1657 Stimmen

Wie kann ich alle Tabellen in einer PostgreSQL-Datenbank löschen?

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.

138voto

Mayur Punkte 3405

Das ist eine wirklich interessante Frage, und Sie werden sie auf vielfältige Weise beantworten können:

1. Durch Löschen und Neuanlegen des aktuellen Schemas

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.

2. Durch das Abrufen aller Tabellennamen aus 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.

3. Terminal

  • 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.

97voto

LenW Punkte 2984

Wie bei Pablo oben, um nur aus einem bestimmten Schema fallen, in Bezug auf Fall:

select 'drop table "' || tablename || '" cascade;' 
from pg_tables where schemaname = 'public';

62voto

Joe Van Dyk Punkte 6590
drop schema public cascade;

Das sollte genügen.

58voto

Farid Chowdhury Punkte 1873

Die folgenden Schritte könnten hilfreich sein (für Linux-Benutzer):

  1. Geben Sie zunächst die postgres Eingabeaufforderung durch folgenden Befehl:

    sudo -u postgres psql
  2. Geben Sie die Datenbank mit diesem Befehl ein (mein Datenbankname ist: maoss ):

    \c maoss
  3. 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;
  4. Verlassen Sie nun die psql durch folgenden Befehl:

    \q

38voto

Tim Diggins Punkte 4236

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.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