Detta kommer att skapa satserna för att ta bort nämnda tabeller och inte andra föremål som matchar mönstret. Inte heller några 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;
Casten till regclass
escapes automatiskt och schemakvalificerar tabellnamn efter behov och är säker mot SQL-injektion. Detaljer:
- Tabellnamn som en PostgreSQL-funktionsparameter
- Definiera tabell- och kolumnnamn som argument i en plpgsql-funktion?
För många tabeller kommer en enda integrerad sats att vara snabbare:
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;
Relaterade svar:
- Finns det ett postgres-kommando för att lista/släppa alla materialiserade vyer?
- Hur tar man bort oanvända sekvenser?