Das 'a' mit diakritischem Zeichen ist eine Zeichenfolge, also eine Kombination aus a und ein verbindendes Zeichen, das diakritische Zeichen ̨ :E'a\u0328'
Es gibt ein äquivalentes zusammengesetztes Zeichen ą :E'\u0105'
Eine Lösung wäre normalisieren die Unicode-Strings, d. h. die Kombinationszeichenfolge vor dem Vergleich in das zusammengesetzte Zeichen umzuwandeln.
Leider scheint Postgres keine eingebaute Unicode-Normalisierungsfunktion zu haben, aber Sie können einfach über PL/Perl oder PL/Python Spracherweiterungen.
Zum Beispiel:
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;
Jetzt als Zeichenfolge E'a\u0328'
wird auf das äquivalente zusammengesetzte Zeichen E'\u0105'
abgebildet durch Verwendung von unicode_normalize
, die Levenshtein-Distanz ist korrekt:
select levenshtein(unicode_normalize(E'a\u0328'), 'x');
levenshtein
-------------
1