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