PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Solusi Ruby generik untuk SQLite3 LIKE atau PostgreSQL ILIKE?

Akar masalah terletak di sini:

Saya menggunakan SQLite3 untuk pengembangan dan PostgreSQL untuk penerapan.

Itu ide yang buruk™. Anda akan terus mengalami ketidaksesuaian - atau lebih buruk:tidak menyadari beberapa sampai kerusakan terjadi.
Gunakan RDBMS (PostgreSQL) yang sama untuk pengembangan dan produksi dan selamatkan diri Anda dari masalah yang tidak berguna.

Saat Anda terjebak dengan penyiapan yang tidak menguntungkan, ada perbaikan sederhana :

lower(style) LIKE lower(?)

Bekerja di kedua platform sama.

  • Anda dapat meletakkan lower() . sebelah kanan , jika Anda memberikan pola penelusuran huruf kecil.

  • Dalam SQLite standar lower(X) hanya melipat huruf ASCII. Untuk lebih lanjut, saya mengutip bab Fungsi Inti dalam manual SQLite:

    Fungsi lower(X) mengembalikan salinan string X dengan semua karakter ASCII dikonversi ke huruf kecil. Fungsi bawaan bawaan lebih rendah () hanya berfungsi untuk karakter ASCII. Untuk melakukan konversi huruf besar-kecil pada karakter non-ASCII, muat ekstensi ICU .

    Tekankan milikku.

  • PostgreSQL lower(X) bekerja dengan UTF-8 di luar kotak.

Sebagai efek samping sambutan, Anda dapat mempercepat tingkatkan kueri itu di PostgreSQL dengan indeks pada ekspresi lower(style) , yang akan lebih cepat daripada menggunakan ILIKE dan indeks dasar pada style .

Selain itu, sejak PostgreSQL 9.1 Anda dapat menggunakan indeks GIN atau GIST dengan pg_trgm ekstensi untuk mempercepat apa saja LIKE dan ILIKE query - trigram tidak peka huruf besar/kecil. Instruksi terperinci dan tautan dalam jawaban terkait ini:

  • String UTF-8 serupa untuk bidang pelengkapan otomatis


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya menulis fungsi PostgreSQL di Ruby on Rails?

  2. Hibernasi UUID dengan PostgreSQL dan SQL Server

  3. Tidak dapat mengurangi datetime offset-naive dan offset-aware

  4. PostgreSQL multi INSERT...KEMBALI dengan beberapa kolom

  5. Bagaimana cara melihat kode CREATE VIEW untuk tampilan di PostgreSQL?