Dbが存在するかどうかを確認する「エレガントな組み込み」の大文字と小文字を区別しない方法はありますか?
SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname'
しか見つかりませんでしたが、これはCSチェックです。すべてのデータベース名を取得し、それらを手動でフィルター処理するために最初に頭に浮かぶことですが、よりエレガントな方法があると思います。
以下を使用できます。
SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname');
...ただし、データベース名areは大文字と小文字が区別されるため、大文字と小文字を正しく一致させない限り、DB名に接続しようとしても実際には機能しません。これはdbname
でインデックスを使用しませんが、これが問題となるのに十分なデータベースがあるとは考えられません。
PostgreSQLは引用符で囲まれていない識別子を小文字に変換するため、ほとんどの場合、クライアントにとって大文字と小文字を区別しないように見えます。実際には、 "DatabaseName"
および"databasename"
は別のものです。
真/偽の答えが必要な場合は、使用できます
select exists(
SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname')
);