Thread: getting 'order by' working with unicode locale? ICU?

getting 'order by' working with unicode locale? ICU?

From
Palle Girgensohn
Date:
Hi!

I'm using Postgresql on FreeBSD, and would like to get "order by" to work 
with unicode. The OS does have collation implemented for unicode (UTF-8) 
locales. Some freebsd people point me towards IBM:s ICU kit.

How much effort would be required to get postgresql to sort properly, 
mainly using the sv_SE.UTF-8 locale (so the problem is not *that* hard, I 
don't need to sort Chinese [yet] :). What needs to be done to get 
postgresql to use ICU (or some other working mechanism?)

Thanks,
Palle





Re: getting 'order by' working with unicode locale? ICU?

From
Tom Lane
Date:
Palle Girgensohn <girgen@pingpong.net> writes:
> I'm using Postgresql on FreeBSD, and would like to get "order by" to work 
> with unicode.

What makes you think it doesn't?  Use the right locale and you're set.
        regards, tom lane


Re: getting 'order by' working with unicode locale? ICU?

From
Palle Girgensohn
Date:
--On onsdag, december 15, 2004 23.21.13 -0500 Tom Lane <tgl@sss.pgh.pa.us> 
wrote:

> Palle Girgensohn <girgen@pingpong.net> writes:
>> I'm using Postgresql on FreeBSD, and would like to get "order by" to
>> work  with unicode.
>
> What makes you think it doesn't?  Use the right locale and you're set.

Not on FreeBSD, since collation is not implemented in unicode locales. One 
way would be to implement it in the OS, of course...

/Palle



Re: getting 'order by' working with unicode locale? ICU?

From
Peter Eisentraut
Date:
Palle Girgensohn wrote:
> Not on FreeBSD, since collation is not implemented in unicode
> locales. One way would be to implement it in the OS, of course...

Try taking the locale definition files from another system and use 
localedef to build locale files for your local system.  The localedef 
source files are supposed to be portable.

-- 
Peter Eisentraut
http://developer.postgresql.org/~petere/


Re: getting 'order by' working with unicode locale? ICU?

From
Palle Girgensohn
Date:

--On torsdag, december 16, 2004 09.20.50 +0100 Peter Eisentraut 
<peter_e@gmx.net> wrote:

> Palle Girgensohn wrote:
>> Not on FreeBSD, since collation is not implemented in unicode
>> locales. One way would be to implement it in the OS, of course...
>
> Try taking the locale definition files from another system and use
> localedef to build locale files for your local system.  The localedef
> source files are supposed to be portable.

As far as I understand, there is no code in FreeBSD to specify the 
collating order for multibyte locales. Would ot be easier to fix the OS or 
hack ICU into PostgreSQL?

A bit off topic: I'm still dreaming of a way to get "order by" working with 
different locales for the same database (different clients getting 
different collation depending on their locale choice). Now this is 
hardcoded at initdb time. Is there any way this could work, ever, in 
PostgreSQL, or will I have to sort client side?

Regards,
Palle



Re: getting 'order by' working with unicode locale? ICU?

From
Hannu Krosing
Date:
Ühel kenal päeval (laupäev, 18. detsember 2004, 02:41+0100), kirjutas
Palle Girgensohn:
>
> --On torsdag, december 16, 2004 09.20.50 +0100 Peter Eisentraut
> <peter_e@gmx.net> wrote:
>
> > Palle Girgensohn wrote:
> >> Not on FreeBSD, since collation is not implemented in unicode
> >> locales. One way would be to implement it in the OS, of course...
> >
> > Try taking the locale definition files from another system and use
> > localedef to build locale files for your local system.  The localedef
> > source files are supposed to be portable.
>
> As far as I understand, there is no code in FreeBSD to specify the
> collating order for multibyte locales. Would ot be easier to fix the OS or
> hack ICU into PostgreSQL?
>
> A bit off topic: I'm still dreaming of a way to get "order by" working with
> different locales for the same database (different clients getting
> different collation depending on their locale choice). Now this is
> hardcoded at initdb time. Is there any way this could work, ever, in
> PostgreSQL, or will I have to sort client side?

I guess you can write a function that returns something client-specific
and sort on that.

select weirdnames from namelistorder by localesort(weirdnames, 'SE');

You can even build and index on localesort(weirdnames, 'SE') to speed
things up for some queries.

And yes, I think using ICU is the right way to do it ;)

------------------
Hannu