Tím se vytvoří příkazy, které uvedené tabulky zruší a ne další objekty odpovídající vzoru. Také žádné systémové tabulky.
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;
Odeslání do regclass
automaticky escapuje a kvalifikuje názvy tabulek podle potřeby a je bezpečný proti SQL injection. Podrobnosti:
- Název tabulky jako Parametr funkce PostgreSQL
- Definovat názvy tabulek a sloupců jako argumenty ve funkci plpgsql?
Pro mnoho tabulek bude jeden integrovaný příkaz rychlejší:
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;
Výsledek:
DROP TABLE tbl1, tbl2, schema1.tbl3;
Související odpovědi:
- Existuje postgres příkaz k vypsání/vypuštění všech materializovaných pohledů?
- Jak odstranit nepoužívané sekvence?