Cela créera les instructions pour supprimer lesdites tables et pas d'autres objets correspondant au motif. Pas de tables système non plus.
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;
Le cast en regclass
échappe et qualifie automatiquement les noms de table selon les besoins et est à l'abri des injections SQL. Détails :
- Nom de table en tant que Paramètre de la fonction PostgreSQL
- Définir les noms de table et de colonne comme arguments dans une fonction plpgsql ?
Pour de nombreux tableaux, une seule instruction intégrée sera plus rapide :
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;
Résultat :
DROP TABLE tbl1, tbl2, schema1.tbl3;
Réponses associées :
- Existe-t-il une commande postgres pour lister/supprimer toutes les vues matérialisées ?
- Comment supprimer les séquences inutilisées ?