Thread: LC_COLLATE=C not working

LC_COLLATE=C not working

From
"Robert Wille"
Date:
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
 

Re: LC_COLLATE=C not working

From
Peter Eisentraut
Date:
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


Re: LC_COLLATE=C not working

From
"Robert Wille"
Date:
> 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?

Re: LC_COLLATE=C not working

From
Tom Lane
Date:
"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

Re: LC_COLLATE=C not working

From
"Robert Wille"
Date:
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


> "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