Проверьте, существует ли база данных postgresql (без учета регистра)

9

Существует ли «элегантный встроенный» регистронезависимый способ проверки существования БД?

Я нашел только SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname', но это проверка CS. Первое, что приходит в голову, - извлечь все имена БД и отфильтровать их вручную, но я думаю, что есть более элегантный способ сделать это.

Андрей Орлов
источник
Почему вы хотите, чтобы чувствительный к регистру элемент не учитывал регистр?
Эван Кэрролл

Ответы:

18

Ты можешь использовать:

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

... однако, имена баз данных являются чувствителен к регистру, поэтому попытка подключения к имени БД не будет на самом деле работает , если не совпадает случай правильно. Он не будет использовать никаких индексов dbname, но вряд ли у вас будет достаточно баз данных, чтобы это имело значение.

Люди не понимают этого, потому что PostgreSQL переводит без кавычек идентификаторы в нижний регистр, поэтому большую часть времени он выглядит без учета регистра для клиентов. На самом деле "DatabaseName"и "databasename"это разные вещи.

Крейг Рингер
источник
4

Если вы хотите получить истинный / ложный ответ, вы можете использовать

select exists(
 SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname')
);
Томас Тернер
источник