Verifique se o banco de dados postgresql existe (maneira que não diferencia maiúsculas de minúsculas)

9

Existe uma maneira "elegante interna" que não diferencia maiúsculas de minúsculas para verificar se o db existe?

Encontrei apenas SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname', mas esta é uma verificação de CS. A primeira coisa que vem à mente para recuperar todos os nomes de banco de dados e filtrá-los manualmente, mas acho que há uma maneira mais elegante de fazer isso.

Andrei Orlov
fonte
Por que você deseja uma verificação sem distinção entre maiúsculas e minúsculas de um item que diferencia maiúsculas de minúsculas?
Evan Carroll

Respostas:

18

Você pode usar:

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

... no entanto, nomes de bancos de dados são caso sensível, assim tentando se conectar ao nome do banco de dados não irá realmente funcionar a menos que você coincidir com o caso corretamente. Isso não usará nenhum índice dbname, mas é pouco provável que você tenha bancos de dados suficientes para isso importar.

As pessoas não percebem isso porque o PostgreSQL dobra os identificadores não citados para minúsculas, portanto, na maioria das vezes, isso não faz distinção entre maiúsculas e minúsculas para os clientes. De fato, "DatabaseName"e "databasename"são coisas diferentes.

Craig Ringer
fonte
4

Se você deseja uma resposta verdadeira / falsa, pode usar

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