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

So finden und löschen Sie einige Tabellen aus der PostgreSQL-Datenbank

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:

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: