Docker image of 11~beta2-2 orders strings case-insensitively

Started by Yahor Yuzefovichover 7 years ago7 messagesbugs
Jump to latest
#1Yahor Yuzefovich
yahor@cockroachlabs.com

Hello,

I used these commands to run Beta PG 11:
docker pull postgres:11
docker run --name POSTGRES11 -e POSTGRES_PASSWORD=postgres -d postgres:11
docker run -it --rm --link POSTGRES11:postgres postgres psql -h postgres -U
postgres

I've created a table as follows:
CREATE TABLE t (id serial PRIMARY KEY, name VARCHAR (255) NOT NULL);
INSERT INTO t (name) VALUES ('M'), ('i'), ('A');

and ran this query:
SELECT name FROM t ORDER BY name;

I expected to see:
A
M
i

but found:
A
i
M

Best,
Yahor Yuzefovich

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Yahor Yuzefovich (#1)
Re: Docker image of 11~beta2-2 orders strings case-insensitively

Yahor Yuzefovich <yahor@cockroachlabs.com> writes:

I expected to see:
A
M
i

but found:
A
i
M

That would be a matter of what collation you're running it under ...
if sort(1) sorts the same way, it's not a PG issue.

regards, tom lane

#3David G. Johnston
david.g.johnston@gmail.com
In reply to: Yahor Yuzefovich (#1)
Re: Docker image of 11~beta2-2 orders strings case-insensitively

On Monday, August 6, 2018, Yahor Yuzefovich <yahor@cockroachlabs.com> wrote:

Hello,

I used these commands to run Beta PG 11:
docker pull postgres:11
docker run --name POSTGRES11 -e POSTGRES_PASSWORD=postgres -d postgres:11
docker run -it --rm --link POSTGRES11:postgres postgres psql -h postgres
-U postgres

I've created a table as follows:
CREATE TABLE t (id serial PRIMARY KEY, name VARCHAR (255) NOT NULL);
INSERT INTO t (name) VALUES ('M'), ('i'), ('A');

and ran this query:
SELECT name FROM t ORDER BY name;

I expected to see:
A
M
i

but found:
A
i
M

This is an environmental aspect (locale) of the docker image; not a bug. I
suggest posting on -general, with details about your locale settings, if
you would like some guidance in that area.

David J.

#4Yahor Yuzefovich
yahor@cockroachlabs.com
In reply to: David G. Johnston (#3)
Re: Docker image of 11~beta2-2 orders strings case-insensitively

Here is the output of running

docker run -it --rm --link POSTGRES11:postgres postgres psql -h postgres -U
postgres -l

List of databases

Name | Owner | Encoding | Collate | Ctype | Access
privileges

-----------+----------+----------+------------+------------+-----------------------

postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |

template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
+

| | | | |
postgres=CTc/postgres

template1 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
+

| | | | |
postgres=CTc/postgres
I might be missing something, but it looks to me that I have regular
collation. Sorry, I don't have any experience with this.

Best,
Yahor Yuzefovich

On Mon, Aug 6, 2018 at 12:03 PM, David G. Johnston <
david.g.johnston@gmail.com> wrote:

Show quoted text

On Monday, August 6, 2018, Yahor Yuzefovich <yahor@cockroachlabs.com>
wrote:

Hello,

I used these commands to run Beta PG 11:
docker pull postgres:11
docker run --name POSTGRES11 -e POSTGRES_PASSWORD=postgres -d postgres:11
docker run -it --rm --link POSTGRES11:postgres postgres psql -h postgres
-U postgres

I've created a table as follows:
CREATE TABLE t (id serial PRIMARY KEY, name VARCHAR (255) NOT NULL);
INSERT INTO t (name) VALUES ('M'), ('i'), ('A');

and ran this query:
SELECT name FROM t ORDER BY name;

I expected to see:
A
M
i

but found:
A
i
M

This is an environmental aspect (locale) of the docker image; not a bug.
I suggest posting on -general, with details about your locale settings, if
you would like some guidance in that area.

David J.

#5David G. Johnston
david.g.johnston@gmail.com
In reply to: Yahor Yuzefovich (#4)
Re: Docker image of 11~beta2-2 orders strings case-insensitively

On Mon, Aug 6, 2018 at 12:30 PM, Yahor Yuzefovich <yahor@cockroachlabs.com>
wrote:

I might be missing something, but it looks to me that I have regular
collation. Sorry, I don't have any experience with this.

The locale en_US.utf8 has the behavior you are observing. You seem to be
familiar with the generic "C" locale which has the sorting behavior you are
expecting.

https://www.postgresql.org/docs/10/static/charset.html
David J.

#6Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Yahor Yuzefovich (#1)
Re: Docker image of 11~beta2-2 orders strings case-insensitively

On 2018-Aug-06, Yahor Yuzefovich wrote:

and ran this query:
SELECT name FROM t ORDER BY name;

I expected to see:
A
M
i

alvherre=# SELECT name FROM t ORDER BY name COLLATE "C";
name
──────
A
M
i
(3 filas)

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#7Yahor Yuzefovich
yahor@cockroachlabs.com
In reply to: Alvaro Herrera (#6)
Re: Docker image of 11~beta2-2 orders strings case-insensitively

Thanks for the explanation. Sorry for the confusion.

Best,
Yahor Yuzefovich

On Mon, Aug 6, 2018 at 4:37 PM, Alvaro Herrera <alvherre@2ndquadrant.com>
wrote:

Show quoted text

On 2018-Aug-06, Yahor Yuzefovich wrote:

and ran this query:
SELECT name FROM t ORDER BY name;

I expected to see:
A
M
i

alvherre=# SELECT name FROM t ORDER BY name COLLATE "C";
name
──────
A
M
i
(3 filas)

--
Álvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services