检查postgresql数据库是否存在(不区分大小写)


9

是否存在“优雅的内置”不区分大小写的方式来检查db是否存在?

我只找到SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname',但这是CS检查。首先想到的是检索所有数据库名称并手动过滤它们,但我认为有一种更优雅的方法。


为什么要对区分大小写的项目进行不区分大小写的检查?
埃文·卡罗尔

Answers:


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')
);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.