Vérifier si la base de données postgresql existe (manière insensible à la casse)

9

Existe-t-il une méthode «élégante intégrée», insensible à la casse, pour vérifier si la base de données existe?

J'ai trouvé seulement SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname', mais c'est un chèque CS. La première chose qui vient à l'esprit pour récupérer tous les noms de base de données et les filtrer à la main, mais je pense qu'il existe une façon plus élégante de le faire.

Andrei Orlov
la source
Pourquoi voulez-vous une vérification insensible à la casse d'un élément sensible à la casse?
Evan Carroll

Réponses:

18

Vous pouvez utiliser:

SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname');

... cependant, les noms de base de données sont sensibles à la casse, donc tenter de se connecter au nom de la base de données ne fonctionnera pas à moins que vous ne correspondiez correctement à la casse. Cela n'utilisera aucun index dbname, mais il est peu probable que vous disposiez de suffisamment de bases de données pour que cela soit important.

Les gens ne s'en rendent pas compte parce que PostgreSQL casse les identifiants non cotés en minuscules, donc la plupart du temps, il ne respecte pas la casse pour les clients. En fait, "DatabaseName"et ce "databasename"sont des choses différentes.

Craig Ringer
la source
4

Si vous voulez une réponse vraie / fausse, vous pouvez utiliser

select exists(
 SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname')
);
Thomas Turner
la source