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.


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.


4

Jika Anda menginginkan jawaban benar / salah, Anda dapat menggunakannya

select exists(
 SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname')
);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.