Questo creerà le istruzioni per eliminare dette tabelle e non altri oggetti che corrispondono al modello. Inoltre nessuna tabella di sistema.
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;
Il cast di regclass
esegue automaticamente l'escape e qualifica lo schema i nomi delle tabelle in base alle esigenze ed è sicuro contro SQL injection. Dettagli:
- Nome tabella come Parametro della funzione PostgreSQL
- Definire i nomi di tabelle e colonne come argomenti in una funzione plpgsql?
Per molte tabelle una singola istruzione integrata sarà più veloce:
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;
Risultato:
DROP TABLE tbl1, tbl2, schema1.tbl3;
Risposte correlate:
- C'è un comando postgres per elencare/eliminare tutte le viste materializzate?
- Come eliminare le sequenze non utilizzate?