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.


¿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.


4

Si desea una respuesta verdadera / falsa, puede usar

select exists(
 SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname')
);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.