Não é um bug.
Convertendo a string literal
'ab ' para character , Isto é o que você recebe:a
Por documentação:
charactersem especificador de comprimento é equivalente acharacter(1).
'a'::character(1) será então forçado a varchar (character varying ) para testar a igualdade com 'a'::varchar ou 'ab'::varchar e produzir TRUE ou FALSE respectivamente. Basicamente, não há nenhuma boa razão para usar
character tudo . É um tipo de legado que sobreviveu à sua utilidade. Basta usar text ou varchar . - Alguma desvantagem de usar o tipo de dados "texto" para armazenar strings?