PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Giải pháp Ruby chung cho SQLite3 LIKE hoặc PostgreSQL ILIKE?

Gốc của vấn đề nằm ở đây:

Tôi đang sử dụng SQLite3 để phát triển và PostgreSQL để triển khai.

Đó là một ý tưởng tồi. Bạn sẽ tiếp tục gặp phải tình trạng không tương thích - hoặc tệ hơn:không nhận ra một số cho đến khi hư hỏng được thực hiện.
Sử dụng cùng một RDBMS (PostgreSQL) để phát triển và sản xuất và tránh cho mình những rắc rối vô nghĩa.

Trong khi bạn gặp khó khăn với thiết lập không may của mình, có một cách khắc phục đơn giản :

lower(style) LIKE lower(?)

Hoạt động trên cả hai nền tảng.

  • Bạn có thể thả lower() bên tay phải , nếu bạn cung cấp mẫu tìm kiếm viết thường.

  • Trong SQLite tiêu chuẩn lower(X) chỉ gấp các chữ cái ASCII. Để biết thêm, tôi trích dẫn chương Các chức năng cốt lõi trong sổ tay SQLite:

    Hàm dưới (X) trả về bản sao của chuỗi X với tất cả các ký tựASCII được chuyển đổi thành chữ thường. Hàm Lower () tích hợp mặc định chỉ hoạt động cho các ký tự ASCII. Để thực hiện chuyển đổi chữ hoa chữ thường trên các ký tự không phải ASCII, hãy tải tiện ích mở rộng ICU .

    Nhấn mạnh của tôi.

  • PostgreSQL lower(X) hoạt động với UTF-8 ngay lập tức.

Như một tác dụng phụ được hoan nghênh, bạn có thể tăng tốc thiết lập truy vấn đó trong PostgreSQL với một chỉ mục trên biểu thức lower(style) , sẽ nhanh hơn so với việc sử dụng ILIKE và một chỉ mục cơ bản về style .

Ngoài ra, kể từ PostgreSQL 9.1, bạn có thể sử dụng chỉ mục GIN hoặc GIST với pg_trgm tiện ích mở rộng để tăng tốc bất kỳ LIKEILIKE truy vấn - bát quái không phân biệt chữ hoa chữ thường. Hướng dẫn chi tiết và liên kết trong câu trả lời liên quan này:

  • Chuỗi UTF-8 tương tự cho trường tự động hoàn thành


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi lấy nguồn libpq ở đâu?

  2. CHÈN NHÓM CHỌN THEO:nhiều cột mục tiêu hơn lỗi biểu thức

  3. Nhận giá trị chung nhất cho mỗi giá trị của cột khác trong SQL

  4. COPY hoạt động như thế nào và tại sao nó nhanh hơn INSERT rất nhiều?

  5. Nâng cấp tự động gần như bằng không thời gian ngừng hoạt động của các cụm PostgreSQL trong đám mây (Phần I)