LC_COLLATE=C not working

Started by Robert Willeover 22 years ago5 messagesgeneral
Jump to latest
#1Robert Wille
vmg2rad02@sneakemail.com

I have two Linux servers, one is test and one is production. I run Postgres 7.3.3 on both of them. I added a feature to my product that requires sorting like strcmp. So, I did an initdb as follows:

export LC_COLLATE=C
initdb

It fixed the sorting problem.

I have tried to do the same on my production server, and when I do the initdb, it says that LC_COLLATE is C, but it does not sort the same as the test server. Namely, on the test server 'z' < '~' and on the production server 'z' > '~'.

Both servers have /usr/share/locale/C/cups_C, and they are identical.

Can anyone explain to me how to get Postgres to use LC_COLLATE=C on my production server? I have tried installing Postgres 7.3.3 RPM's for RedHat 7.3 and 8.0 and even tried Postgres 7.3.4 (for 8.0). Everything sorts the same as en_US.iso885915.

Thanks in advance.

Robert

#2Peter Eisentraut
peter_e@gmx.net
In reply to: Robert Wille (#1)
Re: LC_COLLATE=C not working

Robert Wille writes:

I have tried to do the same on my production server, and when I do the
initdb, it says that LC_COLLATE is C, but it does not sort the same as
the test server. Namely, on the test server 'z' < '~' and on the
production server 'z' > '~'.

You probably still have LC_ALL set to something else. LC_ALL overrides
LC_COLLATE and friends, which in turn override LANG.

--
Peter Eisentraut peter_e@gmx.net

#3Robert Wille
vmg2rad02@sneakemail.com
In reply to: Peter Eisentraut (#2)
Re: LC_COLLATE=C not working

Robert Wille writes:

I have tried to do the same on my production server, and when I do the
initdb, it says that LC_COLLATE is C, but it does not sort the same as
the test server. Namely, on the test server 'z' < '~' and on the
production server 'z' > '~'.

You probably still have LC_ALL set to something else. LC_ALL overrides
LC_COLLATE and friends, which in turn override LANG.

--
Peter Eisentraut peter_e@gmx.net

Nope. Any other ideas?

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Wille (#3)
Re: LC_COLLATE=C not working

"Robert Wille" <vmg2rad02@sneakemail.com> writes:

You probably still have LC_ALL set to something else. LC_ALL overrides
LC_COLLATE and friends, which in turn override LANG.

Nope. Any other ideas?

Please use pg_controldata to verify the LC_ settings on both databases.
I suspect they are not really both C.

regards, tom lane

#5Robert Wille
vmg2rad02@sneakemail.com
In reply to: Peter Eisentraut (#2)
Re: LC_COLLATE=C not working

pg_controldata $PGDATA says LC_COLLATE=C
pg_controldata $PGDATA/data says LC_COLLATE=en_US.iso885915

Perhaps this is a related problem. When I run dbinit, it puts a bunch of
configuration stuff in $PGDATA. When I start the postmaster, it tells me it
is initializing the database and creates $PGDATA/data and puts the same
configuration stuff there. I have no idea why it creates two sets of
configuration data. I don't see this on my test server, just on my
production server. My guess is that when it initializes the database when
the postmaster starts, that it isn't getting the LC_COLLATE setting.

----- Original Message -----
From: "Tom Lane tgl-at-sss.pgh.pa.us |Postgres|"
<xf54hm6pap0t@sneakemail.com>
To: "Robert Wille" <robertw@willeweb.com>
Cc: "Peter Eisentraut peter_e-at-gmx.net |Postgres|"
<4628hm6fbl0t@sneakemail.com>; <pgsql-general@postgresql.org>
Sent: Friday, October 03, 2003 9:35 AM
Subject: Re: [GENERAL] LC_COLLATE=C not working

Show quoted text

"Robert Wille" <vmg2rad02@sneakemail.com> writes:

You probably still have LC_ALL set to something else. LC_ALL overrides
LC_COLLATE and friends, which in turn override LANG.

Nope. Any other ideas?

Please use pg_controldata to verify the LC_ settings on both databases.
I suspect they are not really both C.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org