Dette vil oprette sætningerne for at droppe nævnte tabeller og ikke andre objekter, der matcher mønsteret. Heller ingen systemtabeller.
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;
Castet til regclass
automatisk escapes og skema-kvalificerer tabelnavne efter behov og er sikker mod SQL-injektion. Detaljer:
- Tabelnavn som en PostgreSQL funktionsparameter
- Definer tabel- og kolonnenavne som argumenter i en plpgsql-funktion?
For mange tabeller vil en enkelt integreret sætning være hurtigere:
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;
Resultat:
DROP TABLE tbl1, tbl2, schema1.tbl3;
Relaterede svar:
- Er der en postgres-kommando til at liste/slette alle materialiserede visninger?
- Hvordan sletter man ubrugte sekvenser?