PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment trouver et supprimer certaines tables de la base de données PostgreSQL

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 :

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 :