Os caracteres são comparados usando um agrupamento. Você pode usar o comando SQL
SHOW lc_collate;
para ver qual é o seu agrupamento padrão.
O PostgreSQL usa os agrupamentos do sistema operacional, portanto, o resultado de uma comparação geralmente dependerá do sistema operacional.
Para forçar a comparação ASCII por byte, use o agrupamento C
test=> SELECT 'a X' COLLATE "C" < 'a-';
?column?
----------
t
(1 row)
ou os operadores de comparação byte-wise
test=> SELECT 'a X' ~<~ 'a-';
?column?
----------
t
(1 row)