BUG #16077: Sorting of table list depends on platform

Started by PG Bug reporting formover 6 years ago2 messagesbugs
Jump to latest
#1PG Bug reporting form
noreply@postgresql.org

The following bug has been logged on the website:

Bug reference: 16077
Logged by: Ten Ten
Email address: thomas.bessou@stockly.ai
PostgreSQL version: 10.9
Operating system: Mac OS/Linux
Description:

Running the following query:
```
SELECT table_name, table_schema from information_schema.tables
WHERE table_schema = 'your schema' AND table_type LIKE 'BASE TABLE' ORDER BY
table_name;
```
The output differs on Linux and Mac versions, though the tables are the same
(setup by the same script from an empty database).

We would assume ORDER BY has the same behaviour on all platforms.

We have the same output for this query on Linux Postgres 10.6 and Linux
Postgres 11.5.
On Mac with Postgres 10.6 and on Mac with Postgres 10.9, we also have the
same output, but it is different from the Linux one.

This causes issues such as this one:
https://github.com/diesel-rs/diesel/issues/2202#issuecomment-544148551

Specifically, it seems the Linux version ignores underscores ('_') while
sorting this query, while the Mac version doesn't.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: PG Bug reporting form (#1)
Re: BUG #16077: Sorting of table list depends on platform

PG Bug reporting form <noreply@postgresql.org> writes:

Running the following query:
```
SELECT table_name, table_schema from information_schema.tables
WHERE table_schema = 'your schema' AND table_type LIKE 'BASE TABLE' ORDER BY
table_name;
```
The output differs on Linux and Mac versions, though the tables are the same
(setup by the same script from an empty database).

We would assume ORDER BY has the same behaviour on all platforms.

Unfortunately, that assumption is wrong.

As it happens, this particular query will sort consistently beginning
in v12, because the information_schema object name columns will now
use C collation by default; before that they used the database's default
collation. But *all* non-C collations are potentially platform-dependent,
because there's not a lot of agreement between different libc vendors
as to what the sort order is, even for the "same" locale name. Postgres
is not in a position to impose some kind of standard there.

We have some documentation about this:

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

regards, tom lane