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