postgres wie man die gesamte Tabelle in einem Schema durch Befehl ablegt


10

Ich verwende postgresql und muss alle Tabellen löschen, die im Schema vorhanden sind. Wie kann ich an der Eingabeaufforderung löschen?

Antworten:


17

Sie möchten die CASCADEOption von verwenden DROP SCHEMA. Aus der Dokumentation :

CASCADE - Löschen Sie automatisch Objekte (Tabellen, Funktionen usw.), die im Schema enthalten sind, und wiederum alle Objekte, die von diesen Objekten abhängen

Sei vorsichtig - Betonung über meiner.

Natürlich müssen Sie das Schema anschließend neu erstellen.

Mit diesem Skript können Sie einfach alle Tabellen im aktuellen Schema löschen:

DO $$ DECLARE
    tabname RECORD;
BEGIN
    FOR tabname IN (SELECT tablename 
                    FROM pg_tables 
                    WHERE schemaname = current_schema()) 
LOOP
    EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tabname.tablename) || ' CASCADE';
END LOOP;
END $$;

Ändern WHERE schemaname = current_schema()Sie, ob Sie alle Tabellen in einem anderen Schema ablegen möchten.


wenn ich DROP SCHEMA Schemaname CASCADE benutze;
Ich erhalte den

2
LINE 2? Was steht in Zeile 1?
Philᵀᴹ

Eigentlich muss ich alle Tabellen und das abhängige Objekt löschen. aber es sollte nicht Prozedur und alle löschen ..
Asalthangam

aber wenn ich den Befehl drop schema benutze, löscht er auch das Schema. in meinem Fall sollte Schema vorhanden sein
Asalthangam

@ Asalthangam Antwort aktualisiert
Philᵀᴹ

3
yourdb=# DROP SCHEMA *schema_name* CASCADE;

(funktioniert nur mit Postgresql 9.6.3 getestet, funktioniert möglicherweise nicht mit früheren Versionen)


1

@ Techno Savvy

Löschen Sie Tabellen mit der Postgres-Syntax:

select '-- drop table ' || tablename || ' cascade;' from pg_tables 
where tablename not like 'pg%' and tablename not like 'sql%';

Kopieren Sie den resultierenden Text in ein SQL-Skript oder ein Psql-Terminal. Beachten Sie, dass die Befehle auskommentiert sind.


Ich denke, es ging darum, Tabellen in einem bestimmten Schema abzulegen.
Mustaccio

-2

Wenn Sie nur einen wirklich einfachen Weg wollen, dies zu tun. Hier ist ein Skript, das ich in der Vergangenheit verwendet habe

select 'drop table '||table_name||' cascade constraints;' from user_tables;

Dadurch wird eine Reihe von Drop-Befehlen für alle Tabellen im Schema ausgedruckt. Spoolen Sie das Ergebnis dieser Abfrage und führen Sie es aus.

Wenn Sie mehr als nur Tabellen löschen möchten, können Sie Folgendes entsprechend Ihren Anforderungen bearbeiten

select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')

Quelle: https://forums.oracle.com/forums/thread.jspa?threadID=614090


3
Die Frage ist Postgres, nicht Oracle.
Philᵀᴹ
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.