Dit zal de instructies creëren om genoemde tabellen te laten vallen en niet andere objecten die overeenkomen met het patroon. Ook geen systeemtabellen.
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;
De cast naar regclass
ontsnapt automatisch en kwalificeert tabelnamen als nodig en is veilig tegen SQL-injectie. Details:
- Tabelnaam als een PostgreSQL-functieparameter
- Definieer tabel- en kolomnamen als argumenten in een plpgsql-functie?
Voor veel tabellen is één geïntegreerd statement sneller:
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;
Resultaat:
DROP TABLE tbl1, tbl2, schema1.tbl3;
Gerelateerde antwoorden:
- Is er een postgres-commando om alle gerealiseerde weergaven weer te geven/verwijderen?
- Hoe verwijder ik ongebruikte reeksen?