No es un error en absoluto.
Convertir el literal de cadena 'ab ' a character , esto es lo que obtienes:
a
Por documentación:
character sin especificador de longitud es equivalente a character(1) .
'a'::character(1) luego será obligado a varchar (character varying ) para probar la igualdad con 'a'::varchar o 'ab'::varchar y produce TRUE o FALSE respectivamente.
Básicamente, casi no hay una buena razón para usar character en absoluto . Es un tipo heredado que ha dejado de ser útil. Solo usa text o varchar .
- ¿Alguna desventaja de usar el tipo de datos "texto" para almacenar cadenas?