Compruebe si existe una base de datos postgresql (sin distinción entre mayúsculas y minúsculas)

9

¿Existe una forma "elegante" que no distinga entre mayúsculas y minúsculas para verificar si existe db?

Solo he encontrado SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname', pero este es un control CS. Lo primero que se me ocurre es recuperar todos los nombres de db y filtrarlos a mano, pero creo que hay una forma más elegante de hacerlo.

Andrei Orlov
fuente
¿Por qué desea una comprobación sin distinción entre mayúsculas y minúsculas de un elemento sensible a mayúsculas y minúsculas?
Evan Carroll

Respuestas:

18

Puedes usar:

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

... sin embargo, los nombres de las bases de datos distinguen entre mayúsculas y minúsculas, por lo que intentar conectarse al nombre de la base de datos no funcionará a menos que coincida con el caso correctamente. Esto no usará ningún índice dbname, pero es poco probable que tenga suficientes bases de datos para que esto tenga importancia.

La gente no se da cuenta de eso porque PostgreSQL dobla los identificadores sin comillas a minúsculas, por lo que la mayoría de las veces parece que no distingue entre mayúsculas y minúsculas para los clientes. De hecho, "DatabaseName"y "databasename"son cosas diferentes.

Craig Ringer
fuente
4

Si desea una respuesta verdadera / falsa, puede usar

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