Anasayfa / Database / Postgresql / Postgresql Türkçe case insensitive arama yapmak

Postgresql Türkçe case insensitive arama yapmak

Postgresql create database statement için şuan ICU (International Components for Unicode – Unicode için Uluslararası Bileşenler) desteklemiyor.

bir collation ya deterministiktir yada değildir varsayılan olarak deterministik bir şekilde gelir

Türkçe case insensitive (büyük küçük harf duyarsız) bir collation oluşturalım

CREATE COLLATION ci_turkish (provider = icu, locale = 'tr-TR-u-ks-level2', deterministic = false);

daha sonra bir tablo oluşturup name alanının collate değerine yeni oluşturduğumuz “ci_turkish” değerini verelim

create table testtable1 (
    id serial  primary key,
    name text  COLLATE "ci_turkish"
);
insert into testtable1 (name) values('ibo');
insert into testtable1 (name) values('İBO');
insert into testtable1 (name) values('İBo');
insert into testtable1 (name) values('aLi');
insert into testtable1 (name) values('ALİ');
insert into testtable1 (name) values('ali');
select * from testtable1  where name = 'ibo';

select * from testtable1  where name = 'iBo';

ibo da yazsak iBo da yazsak 3 kaydın 3’üde gelecektir fakat

select * from testtable1  where name like '%i%';

dediğimizde

ERROR: nondeterministic collations are not supported for LIKE

hatası alacağız sadece like kullanımı için değil regular expression kullanmak istediğimizde yine

ERROR: nondeterministic collations are not supported for regular expressions hatasını alacağız.

 

Linkler

https://postgresql.verite.pro/blog/2019/10/14/nondeterministic-collations.html

https://www.cockroachlabs.com/docs/stable/collate.html

https://www.postgresql.org/docs/current/collation.html#COLLATION-NONDETERMINISTIC

https://dba.stackexchange.com/questions/101294/how-to-create-postgres-db-with-case-insensitive-collation

 

Hakkında ibrahim

İlgili Makaleler

Informix unload file to postgresql import

TBL_TEST.unl dosyamızın sonunda ki pipe “|” yok etmek için python da küçük bir script ile …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.