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
3 Réponses :
Ce n'est pas possible, consultez la documentation . p>
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.
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.
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!