Обсуждение: BUG #16077: Sorting of table list depends on platform

Поиск
Список
Период
Сортировка

BUG #16077: Sorting of table list depends on platform

От
PG Bug reporting form
Дата:
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.


Re: BUG #16077: Sorting of table list depends on platform

От
Tom Lane
Дата:
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