Periksa apakah database postgresql ada (cara case-sensitive)

9

Apakah ada cara case-insensitive "built-in elegan" untuk memeriksa apakah ada db?

Saya hanya menemukan SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname', tetapi ini adalah cek CS. Hal pertama yang terlintas dalam pikiran untuk mengambil semua nama db dan memfilternya dengan tangan, tapi saya pikir ada cara yang lebih elegan untuk melakukannya.

Andrei Orlov
sumber
Mengapa Anda menginginkan pemeriksaan case sensitif terhadap case sensitif?
Evan Carroll

Jawaban:

18

Kamu bisa menggunakan:

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

... Namun, nama database adalah case sensitive, sehingga mencoba untuk menyambung ke nama DB tidak akan benar-benar bekerja kecuali Anda cocok kasus ini dengan benar. Ini tidak akan menggunakan indeks apa pun dbname, tetapi agaknya tidak mungkin Anda memiliki cukup database untuk mempermasalahkan hal ini.

Orang-orang tidak menyadari hal itu karena case-lipatan PostgreSQL tanda pengenal tanpa tanda kutip untuk huruf kecil, sehingga sebagian besar waktu terlihat tidak sensitif huruf untuk klien. Sebenarnya, "DatabaseName"dan "databasename"hal-hal yang berbeda.

Craig Ringer
sumber
4

Jika Anda menginginkan jawaban benar / salah, Anda dapat menggunakannya

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