it-swarm.com.de

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

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

10
asalthangam

Sie möchten die Option CASCADE von DROP SCHEMA Verwenden. Von die Dokumentation :

CASCADE - Objekte (Tabellen, Funktionen usw.), die im Schema enthalten sind, werden automatisch gelöscht, 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 Sie WHERE schemaname = current_schema(), wenn Sie alle Tabellen in einem anderen Schema ablegen möchten.

17
Philᵀᴹ
yourdb=# DROP SCHEMA *schema_name* CASCADE;

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

3
comte

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

1
vinh