„А“ с диакритичен знак е последователност от знаци, т.е. комбинация от а и комбиниращ знак, диакритиката ̨ :E'a\u0328'
Има еквивалентен предварително съставен знак ą :E'\u0105'
Решение би било нормализиране Unicode низовете, т.е. за преобразуване на комбинираната последователност от знаци в предварително съставен знак, преди да ги сравните.
За съжаление изглежда, че Postgres няма вградена функция за нормализиране на Unicode, но можете лесно да получите достъп до нея чрез PL/Perl или PL/Python езикови разширения.
Например:
create extension plpythonu;
create or replace function unicode_normalize(str text) returns text as $$
import unicodedata
return unicodedata.normalize('NFC', str.decode('UTF-8'))
$$ language plpythonu;
Сега, като последователността от знаци E'a\u0328'
се нанася върху еквивалентен предварително съставен знак E'\u0105'
чрез използване на unicode_normalize
, разстоянието на Левенщайн е правилно:
select levenshtein(unicode_normalize(E'a\u0328'), 'x');
levenshtein
-------------
1