Thread: LC_COLLATE=C not working
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
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
> 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?
"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
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