Thread: BUG #16789: Wrong order by output

BUG #16789: Wrong order by output

From
PG Bug reporting form
Date:
The following bug has been logged on the website:

Bug reference:      16789
Logged by:          Petros Manousis
Email address:      pmanousis@gmail.com
PostgreSQL version: 13.1
Operating system:   Linux (OpenSuse TumbleWeed)
Description:

I also tried my data in http://sqlfiddle.com/#!17/55afc5/3 with version 9.6
of postgres and the issue seems to be there too.

Here is my example:
create table players ( name varchar(64), url varchar(256), primary key
(name));
insert into players values('Theo Akwuba', 'a');
insert into players values('Theo Bouteille', 'b');
insert into players values('Theodor Dlugos', 'c');
insert into players values('Theodor Kirov', 'd');
insert into players values('Theodoros Tsiloulis', 'e');
insert into players values('Theodoros Zaras', 'f');
insert into players values('Theo John', 'g');
insert into players values('Theo Leon', 'h');
insert into players values('Theo Magrit', 'i');
insert into players values('Theo Maledon', 'j');
insert into players values('Theo Pinson', 'k');
insert into players values('Theo Rey', 'l');
SELECT name from players ORDER BY name ;

I would expect as result the following:
Theo Akwuba
Theo Bouteille
Theo John
Theo Leon
Theo Magrit
Theo Maledon
Theo Pinson
Theo Rey
Theodor Dlugos
Theodor Kirov
Theodoros Tsiloulis
Theodoros Zaras

BUT what I got is this:
 Theo Akwuba
 Theo Bouteille
 Theodor Dlugos
 Theodor Kirov
 Theodoros Tsiloulis
 Theodoros Zaras
 Theo John
 Theo Leon
 Theo Magrit
 Theo Maledon
 Theo Pinson
 Theo Rey

I don't know if there is anything specific to do for having a proper ordered
output, but the result seems wrong to me. I also tried the same query in
sqlite and had no issues, as well as with libreoffice sorting and all was as
expected.


Re: BUG #16789: Wrong order by output

From
Tom Lane
Date:
PG Bug reporting form <noreply@postgresql.org> writes:
> I don't know if there is anything specific to do for having a proper ordered
> output, but the result seems wrong to me.

You need to use a locale (collation) that matches your expectations.

FWIW, I get the same ordering you show with COLLATE "en_US" on a
Linux box, and it's likely that glibc would use similar ordering
rules for some other languages.  The behavior you say you want
looks like it'd match COLLATE "C", though that might act a little
funny with non-ASCII characters.

(I'm not here to defend glibc's sorting rules, but I think what
they're doing in this example is ignoring spaces in the first pass.)

You can find more about this topic in

https://www.postgresql.org/docs/current/charset.html

            regards, tom lane