BUG #4338: Order by seems to trim some characters before sort

Started by Domingo Alvarez Duarteover 17 years ago2 messagesbugs
Jump to latest
#1Domingo Alvarez Duarte
mingodad@gmail.com

The following bug has been logged online:

Bug reference: 4338
Logged by: Domingo Alvarez Duarte
Email address: mingodad@gmail.com
PostgreSQL version: 8.2.9
Operating system: linux
Description: Order by seems to trim some characters before sort
Details:

I have a test table:
CREATE TABLE test
(
id serial NOT NULL,
t character varying,
CONSTRAINT test_pkey PRIMARY KEY (id)
)
with tis data retrieved by: select * from test order by 2

4;"---abacate"
3;"arpa"
5;"--- bacate"
1;"dad"
2;"--dad"

I expect the result to be :

5;"--- bacate"
4;"---abacate"
2;"--dad"
3;"arpa"
1;"dad"

It seems that postgresql is issuing a kind of trim on the column value
before sort/compare, because it's ignoring spaces and '-' wich I use
propositally to move some values to front.

Why postgresql is behaving this way ?
I couldn't find an expalanation in the documentation.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Domingo Alvarez Duarte (#1)
Re: BUG #4338: Order by seems to trim some characters before sort

"Domingo Alvarez Duarte" <mingodad@gmail.com> writes:

It seems that postgresql is issuing a kind of trim on the column value
before sort/compare, because it's ignoring spaces and '-' wich I use
propositally to move some values to front.

Why postgresql is behaving this way ?

Because the LC_COLLATE setting is telling it to. If you try sorting
the same data with sort(1) I'll bet you get the same result. This
is standard behavior for quite a lot of locale settings.

If you don't like the result then you need to switch to a different
locale setting, probably "C". Unfortunately, that requires dump,
re-initdb with the correct locale option, reload :-(

regards, tom lane