Kiểm tra xem cơ sở dữ liệu postgresql có tồn tại không (trường hợp không nhạy cảm)


9

Có một cách không phân biệt chữ hoa chữ thường "tích hợp sẵn" để kiểm tra xem db có tồn tại không?

Tôi chỉ tìm thấy SELECT datname FROM pg_catalog.pg_database WHERE datname='dbname', nhưng đây là kiểm tra CS. Điều đầu tiên xuất hiện trong đầu để lấy tất cả các tên db và lọc chúng bằng tay, nhưng tôi nghĩ có nhiều cách thanh lịch hơn để làm điều đó.


Tại sao bạn muốn kiểm tra không nhạy cảm trường hợp của một mặt hàng nhạy cảm trường hợp?
Evan Carroll

Câu trả lời:


18

Bạn có thể dùng:

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

... tuy nhiên, tên cơ sở dữ liệu phân biệt chữ hoa chữ thường, do đó, việc cố gắng kết nối với tên DB sẽ không thực sự hoạt động trừ khi bạn khớp đúng trường hợp. Điều này sẽ không sử dụng bất kỳ chỉ mục nào trên dbname, nhưng có vẻ như bạn không có đủ cơ sở dữ liệu cho vấn đề này.

Mọi người không nhận ra rằng vì PostgreSQL gấp các số nhận dạng không được trích dẫn thành chữ thường, nên hầu hết thời gian nó có vẻ không phân biệt chữ hoa chữ thường đối với máy khách. Trong thực tế, "DatabaseName""databasename"là những thứ khác nhau.


4

Nếu bạn muốn có một câu trả lời đúng / sai, bạn có thể sử dụng

select exists(
 SELECT datname FROM pg_catalog.pg_database WHERE lower(datname) = lower('dbname')
);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.