Eu acho que o PostgreSQL automaticamente tenta descobrir o tipo nos bastidores e no Linux ele tenta se livrar do ' ', algumas das comparações também são baseadas na localidade.
-
Assim,' 2' > '10'torna-se'2'>'10'e a comparação é'2'>'1'; eles não são iguais, então não há necessidade de continuar com o resto da string, eascii('2')é maior queascii('1'), então ele é avaliado como verdadeiro.
-
Se fosse uma operação de igualdade (por exemplo, ' 22' ='22 ') resultaria em false porque o Postgres faz uma comparação byte a byte. Isso é importante porque o mecanismo usa dois algoritmos diferentes ao fazer comparações.
-
Se você especificar o tipo via typecasting, ele não substituirá as regras de espaço (' '=>'').
O crédito também vai para: RhodiumToad e Peerce em #postgresql