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

Comment supprimer toutes les tables dans psql (terminal interactif PostgreSQL) qui commence par un mot commun ?

Ce script générera les commandes DDL pour toutes les supprimer :

SELECT 'DROP TABLE ' || t.oid::regclass || ';'
FROM   pg_class t
-- JOIN   pg_namespace n ON n.oid = t.relnamespace -- to select by schema
WHERE  t.relkind = 'r'
AND    t.relname ~~ E'doors\_%' -- enter search term for table here
-- AND n.nspname ~~ '%myschema%' -- optionally select by schema(s), too
ORDER  BY 1;

Le casting t.oid::regclass fait fonctionner la syntaxe pour les identificateurs à casse mixte, les mots réservés ou les caractères spéciaux dans les noms de table également. Il empêche également l'injection SQL et ajoute le nom du schéma si nécessaire. En savoir plus sur types d'identifiant d'objet dans le manuel .

À propos du chemin de recherche de schéma.

Vous pouvez également automatiser le dépôt, mais c'est imprudent de ne pas vérifier ce que vous supprimez réellement avant de le faire.

Vous pouvez ajouter CASCADE à chaque instruction pour abandonner les objets dépendants (vues et références aux clés étrangères). Mais, encore une fois, c'est imprudent sauf si vous savez très bien ce que vous faites. Les contraintes de clé étrangère ne sont pas une grande perte, mais cela supprimera également toutes les vues dépendantes. Sans CASCADE vous obtenez des messages d'erreur vous informant des objets qui vous empêchent de supprimer la table. Et vous pouvez ensuite vous en occuper.