1
votes

Supprimer plusieurs bases de données dans PostgreSQL à l'aide d'un caractère générique

Souvent, lors de l'ajout d'une fonctionnalité à un projet existant, j'ai quelque chose comme (résultat de la liste des bases de données)

drop database project_x_001, ..., project_x_00n;

Je dois nettoyer la base de données à la fin, en supprimant toute la base de données qui commencez par un certain modèle, dans ce cas project_x_ *

y a-t-il un élément élégant (plus propre) pour faire cela dans PostgreSQL, à côté de:

project_x_001, ..., project_x_00n

la liste c'est parfois trop long, et vous auriez besoin à chaque fois de lister les bases de données et d'en supprimer une partie


0 commentaires

3 Réponses :


2
votes

Ce n'est pas possible, consultez la documentation .


2 commentaires

Je suis d'accord que ce n'est pas possible en utilisant uniquement SQL, j'aimerais savoir s'il existe une manière piratée de le faire.


Écrivez un script dans votre langue préférée.



4
votes

la solution suivante s'applique à Ubuntu

for db in `psql -c '\l' | grep project_x_* | cut -d '|' -f 1`; do psql -c "drop database $db"; done

essentiellement la commande ci-dessus boucle sur les bases de données sélectionnées en utilisant grep; veuillez voir le résultat de cette sélection avant de supprimer quoi que ce soit de la base de données.


0 commentaires

1
votes

J'avais besoin d'une légère modification sur la réponse de @ rachid parce que mes noms de base de données entraînaient une syntaxe invalide à partir du caractère: "-"

Les noms de mes bases de données étaient nommés horriblement comme testrun-ppsubscriptions-1597745672749-276 code >

Il fallait donc le modifier comme:

for db in `psql -c '\l' | grep testrun* | cut -d '|' -f 1`; do psql -c "drop database \"$db\" "; done

Merci @rachid!


0 commentaires