Thread: Cannot create collation?
hi i'm trying to test collation per column on newest pg head, but I can't seem to get it working. my normal locale is en_US.UTF-8, but in database, for test purposes I used pl_PL.UTF-8. Which works. When I try to create french collation, it seems to work, but fails soon: $ CREATE COLLATION french (LOCALE = 'fr_FR.UTF-8'); CREATE COLLATION $ create table test3 ( x text COLLATE "french" ); CREATE TABLE $ copy test3 from '/tmp/french'; COPY 55 $ select * from test3; x ------------------- d'accord déclassé décolleté décor découpage déjà vu demi-glace demi-sec dénouement de nouveau dérailleur de règle de rigueur dernier cri derrière déshabillé désolé détente de trop diablerie directeur sportif divertissement dossier doyen dressage du jour écarté échappé éclair éclat écorché élan élan vital éminence grise en bloc en escalier en famille enfant terrible en garde ennui en passant en pointe en route entente entrée entremets entre nous entrepreneur escargot escritoire et toi? étude étui excusez-moi extraordinaire (55 rows) $ select * from test3 order by x; ERROR: could not create locale "fr_FR.UTF-8": Success What is wrong in here? In shell, I can do: LC_COLLATE=fr_FR.UTF-8 sort /tmp/french and it works as expected. Best regards, depesz -- The best thing about modern society is how easy it is to avoid contact with it. http://depesz.com/
On Wed, Mar 02, 2011 at 01:58:02PM +0100, hubert depesz lubaczewski wrote: > $ select * from test3 order by x; > ERROR: could not create locale "fr_FR.UTF-8": Success > What is wrong in here? never mind. sort looked like ok, but in fact apparently was't, and after adding "language-support-fr" package in ubuntu, and restarting pg - pg works. Best regards, depesz -- The best thing about modern society is how easy it is to avoid contact with it. http://depesz.com/
On 02.03.2011 14:58, hubert depesz lubaczewski wrote: > When I try to create french collation, it seems to work, but fails soon: > > $ CREATE COLLATION french (LOCALE = 'fr_FR.UTF-8'); > CREATE COLLATION Hmm, regardless of what's causing this, I wonder if we should check that the locale works at CREATE COLLATION time, rather than fail when you try to use it. Ie. add a call to pg_newlocale_from_collation() at the end of DefineCollation(). Or would that just make it more difficult to restore a database with invalid collations? > $ select * from test3 order by x; > ERROR: could not create locale "fr_FR.UTF-8": Success Looks like newlocale() call returned 0, but didn't set errno. I don't think that's supposed to happen. Which platform is this? Which operating system and version? -- Heikki Linnakangas EnterpriseDB http://www.enterprisedb.com
On Wed, Mar 02, 2011 at 06:00:45PM +0200, Heikki Linnakangas wrote: > On 02.03.2011 14:58, hubert depesz lubaczewski wrote: > >When I try to create french collation, it seems to work, but fails soon: > > > >$ CREATE COLLATION french (LOCALE = 'fr_FR.UTF-8'); > >CREATE COLLATION > > Hmm, regardless of what's causing this, I wonder if we should check > that the locale works at CREATE COLLATION time, rather than fail > when you try to use it. Ie. add a call to > pg_newlocale_from_collation() at the end of DefineCollation(). Or > would that just make it more difficult to restore a database with > invalid collations? > > >$ select * from test3 order by x; > >ERROR: could not create locale "fr_FR.UTF-8": Success > > Looks like newlocale() call returned 0, but didn't set errno. I > don't think that's supposed to happen. Which platform is this? Which > operating system and version? linux ubuntu 10.10. I was missing language-pack-fr and language-support-fr. interestingly, I'm getting weird results. with just language-pack-fr i can order by column, but result is not the one i'd expect. when I added language-support-fr - ordering works, and returns data as expected. weird. Best regards, depesz -- The best thing about modern society is how easy it is to avoid contact with it. http://depesz.com/
On ons, 2011-03-02 at 18:00 +0200, Heikki Linnakangas wrote: > Hmm, regardless of what's causing this, I wonder if we should check > that the locale works at CREATE COLLATION time, rather than fail when > you try to use it. Ie. add a call to pg_newlocale_from_collation() at > the end of DefineCollation(). Yeah, I was apparently hoping that check_encoding_locale_matches() would catch invalid locales, but it doesn't, so we should put in an explicit check.
On ons, 2011-03-02 at 21:59 +0200, Peter Eisentraut wrote: > On ons, 2011-03-02 at 18:00 +0200, Heikki Linnakangas wrote: > > Hmm, regardless of what's causing this, I wonder if we should check > > that the locale works at CREATE COLLATION time, rather than fail when > > you try to use it. Ie. add a call to pg_newlocale_from_collation() at > > the end of DefineCollation(). > > Yeah, I was apparently hoping that check_encoding_locale_matches() would > catch invalid locales, but it doesn't, so we should put in an explicit > check. Fixed.