'a'et' med en diakritisk er en tegnsekvens, dvs. en kombination af a og et kombineret tegn, diakritikken ̨ :E'a\u0328'
Der er et tilsvarende prækomponeret tegn ± :E'\u0105'
En løsning ville være at normalisere Unicode-strengene, dvs. at konvertere den kombinerede tegnsekvens til det prækomponerede tegn, før de sammenlignes.
Desværre ser Postgres ikke ud til at have en indbygget Unicode-normaliseringsfunktion, men du kan nemt få adgang til en via PL/Perl eller PL/Python sprogudvidelser.
For eksempel:
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;
Nu, som tegnsekvensen E'a\u0328'
er afbildet på det tilsvarende prækomponerede tegn E'\u0105'
ved at bruge unicode_normalize
, Leveshtein-afstanden er korrekt:
select levenshtein(unicode_normalize(E'a\u0328'), 'x');
levenshtein
-------------
1