BUG #4338: Order by seems to trim some characters before sort
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.
"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