Thread: BUG #6495: mis-sorting on string field consisting of space-padded numbers

BUG #6495: mis-sorting on string field consisting of space-padded numbers

From
lou@paprikash.com
Date:
The following bug has been logged on the website:

Bug reference:      6495
Logged by:          Lou Duchez
Email address:      lou@paprikash.com
PostgreSQL version: 9.1.2
Operating system:   Fedora 16, CentOS 5
Description:=20=20=20=20=20=20=20=20

Download the following file and feed it into psql:

http://www.paprikash.com/lou/missorttest.sql

Then run the command:

select * from missorttest order by hiercode;

Each "hiercode" entry contains concatenations of numbers, where each number
is left-padded to take exactly four characters.  PostgreSQL is sorting as if
the padding were on the right.  As a result, "   2  10" is coming before "=
=20=20
2   2", even though a literal sorting of the string should put "   2   2"
first (because chr 32 comes before chr 49).

More info: this error does not occur on the Windows build of PostgreSQL.=20
Also, I compile my own versions of PostgreSQL on Fedora and CentOS, taking
all the defaults.

Re: BUG #6495: mis-sorting on string field consisting of space-padded numbers

From
Pavel Stehule
Date:
Hello

2012/2/28  <lou@paprikash.com>:
> The following bug has been logged on the website:
>
> Bug reference: =C2=A0 =C2=A0 =C2=A06495
> Logged by: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Lou Duchez
> Email address: =C2=A0 =C2=A0 =C2=A0lou@paprikash.com
> PostgreSQL version: 9.1.2
> Operating system: =C2=A0 Fedora 16, CentOS 5
> Description:
>
> Download the following file and feed it into psql:
>
> http://www.paprikash.com/lou/missorttest.sql
>
> Then run the command:
>
> select * from missorttest order by hiercode;
>
> Each "hiercode" entry contains concatenations of numbers, where each numb=
er
> is left-padded to take exactly four characters. =C2=A0PostgreSQL is sorti=
ng as if
> the padding were on the right. =C2=A0As a result, " =C2=A0 2 =C2=A010" is=
 coming before "
> 2 =C2=A0 2", even though a literal sorting of the string should put " =C2=
=A0 2 =C2=A0 2"
> first (because chr 32 comes before chr 49).
>
> More info: this error does not occur on the Windows build of PostgreSQL.
> Also, I compile my own versions of PostgreSQL on Fedora and CentOS, taking
> all the defaults.
>

This should not be bug - this behave depends on system libraries and
locales setting.

Please, check value of lc_collate variable

postgres=3D> show lc_collate;
 lc_collate
-------------
 en_US.UTF-8
(1 row)

different collations should have different order.

Regards

Pavel Stehule

>
> --
> Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-bugs