Dadurch werden die Anweisungen erstellt, um diese Tabellen zu löschen und nicht andere Objekte, die dem Muster entsprechen. Auch keine Systemtabellen.
SELECT 'DROP TABLE ' || c.oid::regclass || ';'
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace -- to restrict to a schema
WHERE c.relkind = 'r' -- only tables
AND c.relname ILIKE '%gtab%' -- pattern for table names
AND n.nspname = 'public' -- restrict to a schema
ORDER BY 1;
Die Umwandlung in regclass
Escapezeichen und Schema-qualifiziert Tabellennamen automatisch nach Bedarf und ist sicher gegen SQL-Injection. Einzelheiten:
- Tabellenname als PostgreSQL-Funktionsparameter
- Tabellen- und Spaltennamen als Argumente in einer plpgsql-Funktion definieren?
Bei vielen Tabellen ist eine einzelne integrierte Anweisung schneller:
SELECT 'DROP TABLE ' || string_agg(c.oid::regclass::text, ', ') || ';'
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
AND c.relname ILIKE '%gtab%'
AND n.nspname = 'public'
ORDER BY 1;
Ergebnis:
DROP TABLE tbl1, tbl2, schema1.tbl3;
Verwandte Antworten:
- Gibt es einen Postgres-Befehl zum Auflisten/Löschen aller materialisierten Ansichten?
- Wie lösche ich ungenutzte Sequenzen?