Wie kann man alle oder bestimmte (über reg. Ausdrücke/LIKE?) Tabellen 'droppen'?

Wie kann man alle oder bestimmte Tabellen, die ein Kriterium erfüllen (z.B. gleiches Prefix im Tabellennamen) löschen?

Also einzelne Benannte kann man ja in der psql-shell mit

 drop table tableA, tableB;

oder

 drop table tableA, tableB CASCADE;

angeben.

Also sowas wie (Pseudocode):

 DROP TABLES;

oder

 DROP TABLE LIKE 'bla_%';

oder

 DROP TABLE SELECT table_name FROM information_schema.tables
 WHERE table_schema='public' AND table_name LIKE 'bla_%';

müsste doch über die psql-shell doch irgendwie gehen?

Das gleiche gilt natürlich auch für VIEWS, TRIGGER, FUNCTION, OPERATOR.

Diese Funktionalität vermisse ich bzw. weiss noch nicht wie’s geht.

Bei ca. 500 Tabellen, 70 Views, 140 Triggern wird es sonst ziemlich nervig, wenn man einen Teil davon löschen will.

Im grafischen pgAdmin3 habe ich inzwischen folgendes herausgefunden: in der Tabellenliste die gewünschten Tabellen mit
SHIFT + Pfeilnachunten
oder
SHIFT + Bildnachunten
oder
SHIFT + Ende
auswählen und dann RechtMaus-Kontexmenü - ‘Löschen/Droppen’ bzw. ‘Kaskadiert droppen’ wählen.

Aber wie kann man das auf der Shell lösen?

Grüße, peterdd

Indem du dir eine kleine Funktion schreibst die genau das erfüllt.
Tabellen und andere Daten stehen im information_schema, dort kann man per SELECT aus einer Funktion heraus drauf zugreifen.

Dachte eigentlich so was gehört zur Grundfunktionalität einer SQL-DB.
Das man dafür schon ne eigene Funktion schreiben muss wundert mich etwas.

Am besten wäre wirklich ein reines SQL-Standardkonstrukt , da es wenn möglich dbunabhängig bleiben soll. Wenn eine DB das dann nicht kann deren Pech.

Na, die Nacht ist noch jung…SQL-Standard wälz :astonished:

peterdd

Ja, doch, ich bin interessiert. Steht das im Standard? :wink:

Ich dachte auch, es gehört zur Grundfunktionalität einer SQL-DB mir jede Stunde 100 EUR aufs Konto zu überweisen.

DROP TABLE gehört zu den Dingen, bei denen man sehr genau hinsehen sollte. Da mit Wildcards zu operieren halte ich für nicht sehr sinnvoll und die Väter des Standards wohl ebenfalls.