O 'a' com um diacrítico é uma sequência de caracteres, ou seja, uma combinação de a e um caractere de combinação, o diacrítico ̨ :
E'a\u0328'
Existe um caractere pré-composto equivalente ± :
E'\u0105'
Uma solução seria normalizar as strings Unicode, ou seja, para converter a sequência de caracteres combinada no caractere pré-composto antes de compará-los.
Infelizmente, o Postgres não parece ter uma função de normalização Unicode integrada, mas você pode acessar facilmente uma através do PL/Perl ou PL/Python extensões de idioma.
Por exemplo:
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;
Agora, como a sequência de caracteres
E'a\u0328'
é mapeado no caractere pré-composto equivalente E'\u0105'
usando unicode_normalize
, a distância levenshtein está correta:select levenshtein(unicode_normalize(E'a\u0328'), 'x');
levenshtein
-------------
1