Creo que PostgreSQL automáticamente intenta descubrir el tipo detrás de escena y en Linux intenta deshacerse del '', algunas de las comparaciones también se basan en la configuración regional.
-
Así,
' 2' > '10'se convierte en'2'>'10'y la comparación es'2'>'1'; no son iguales, por lo que no es necesario continuar con el resto de la cadena yascii('2')es mayor queascii('1'), por lo que se evalúa como verdadero. -
Si fuera una operación de igualdad (por ejemplo, '22' ='22') resultaría falso porque Postgres hace una comparación byte por byte. Esto es importante porque el motor usa dos algoritmos diferentes al hacer comparaciones.
-
Si especifica el tipo a través de encasillamiento, entonces no anulará las reglas de espacio (
' '=>'').
También el crédito es para: RhodiumToad y Peerce en #postgresql