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

And*_*lov 12 postgresql catalogs

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

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

Cra*_*ger 21

您可以使用:

SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname');
Run Code Online (Sandbox Code Playgroud)

......然而,数据库名称区分大小写的,因此试图连接到数据库名称实际上不会工作,除非你的情况下正确匹配。这不会在 上使用任何索引dbname,但是您不太可能有足够的数据库来解决这个问题。

人们没有意识到这一点,因为 PostgreSQL 将不带引号的标识符大小写折叠为小写,所以大多数时候它看起来对客户端不区分大小写。其实"DatabaseName""databasename"是不同的东西。


小智 8

If you want a true/false answer you can use

select exists(
 SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname')
);
Run Code Online (Sandbox Code Playgroud)