Why is \' 2\' with an initial space bigger than \'10\'?
select \' 2\' > \'10\';
?column?
----------
t
(1 row)
I tried i
I think PostgreSQL automatically tries to figure out the type behind the scenes and in Linux it tries to get rid of the ' ', some of the comparisons are also based on locale.
Thus, ' 2' > '10'
becomes '2'>'10'
and the comparison is '2'>'1'
; they are not equal, so no need to continue with the rest of the string, and ascii('2')
is greater than ascii('1')
, so it evaluates to true.
If it were an equality operation (e.g. ' 22' = '22 ') it would result to false because Postgres does a byte by byte comparison. This is important because the engine uses two different algorithms when doing comparisons.
If you specify the type via typecasting, then it won't override the space rules (' '=>''
).
Also credit goes to: RhodiumToad and Peerce in #postgresql