PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie lösche ich alle Tabellen in psql (interaktives PostgreSQL-Terminal), die mit einem gemeinsamen Wort beginnen?

Dieses Skript generiert die DDL-Befehle, um sie alle zu löschen:

SELECT 'DROP TABLE ' || t.oid::regclass || ';'
FROM   pg_class t
-- JOIN   pg_namespace n ON n.oid = t.relnamespace -- to select by schema
WHERE  t.relkind = 'r'
AND    t.relname ~~ E'doors\_%' -- enter search term for table here
-- AND n.nspname ~~ '%myschema%' -- optionally select by schema(s), too
ORDER  BY 1;

Die Umwandlung t.oid::regclass sorgt dafür, dass die Syntax auch für Bezeichner mit Groß- und Kleinschreibung, reservierte Wörter oder Sonderzeichen in Tabellennamen funktioniert. Es verhindert auch die SQL-Einschleusung und stellt den Schemanamen bei Bedarf voran. Mehr über Objektkennungstypen im Handbuch .

Über den Schema-Suchpfad.

Sie könnten das Ablegen auch automatisieren, aber das ist unklug nicht zu prüfen, was Sie tatsächlich löschen, bevor Sie dies tun.

Sie könnten CASCADE anhängen zu jeder Anweisung zu DROP-abhängigen Objekten (Ansichten und referenzierende Fremdschlüssel). Aber auch das ist unklug es sei denn, Sie wissen genau, was Sie tun. Fremdschlüsseleinschränkungen sind kein großer Verlust, aber dadurch werden auch alle abhängigen Ansichten vollständig gelöscht. Ohne CASCADE Sie erhalten Fehlermeldungen, die Sie darüber informieren, welche Objekte Sie daran hindern, die Tabelle zu löschen. Und damit kann man dann umgehen.