PostgreSQL a LC_TIME

Karel Zak zakkr na zf.jcu.cz
Čtvrtek Duben 7 13:42:12 CEST 2005


On Wed, 2005-04-06 at 14:40 +0200, Jan Kasprzak wrote:

> : Protoze to nemusi byt snadne. DB potrebuje pro svuj beh nejake presne
> : definovane locales v kterych ma indexy. Prepinani mezi ruznymi locales
> : podle potreb (ruzne indexy, ruzne formatovane vystupy apod.) je neco co
> : neni implementovane (protoze to vubec neni trivialni). Ono myslet si, ze
> : zavolam setlocale() milionkrat za jeden SQL dotaz je proste blby
> : napad... :-)
> 
> 	Ja myslim ze staci jednou za session (ALTER SESSION ...).

Ano pokud bude stacit mit jedny locales pro celou session.

Ale pokud budu podporovat to_char(timestamp, text, LC_...) tak musim
ocekavat i pouziti jako je:

select to_char(x, y, LC_A), to_char(x, y, LC_B), to_char(x, y, LC_C)

to znamena mit pro zpracovani kazde radky locales A,B a C. Bud je budu
mit nekde v pameti a nebo mezi nema budu prepinat pomoci setlocale(). To
je to o cem jsem mluvil.

> Nerikej mi ze u datumu jsou nejake indexy zavisle na locale :-)

Indexy ne, ale v soucasne dobe plati, ze timestamp ve stringu, lze bez 
neceho dalsiho prevadet zase na timestamp (podobne i cisla). To co navrhujes 
by znamenalo, ze pretypovani mezi typama ma zavislost na nastaveni session. 
Na neco takoveho mi nestaci fantazie ;-)

Proto je mozna lepsi ponechat systemova pretypovani bez locales a formatovani 
delat na pozadani samostatnou k tomu urcenou funkci. Ktera si bude nastaveni 
locales brat z parametru nebo z nejakeho nastaveni session.

Souhlasim, ze neco jako ALTER SESSION .. TOCHAR_LOCALES by nemusel byt 
az zase tak velky problem.

> :  Pokud lze na backendu tu konverzi provadet tak ano. V tomto pripade to
> : to nelze. 
> 
> 	Lze - napriklad pres plPerl, nebo i jen pomoci CASE..WHEN
> pro prevod cisla mesice na cesky nazev.

dobra :-)

> 	No, jeste jsem premyslel o jine variante - vykaslat se na vsechny
> interni postgresovske metody zpracovani casu, mit sloupce typu
> 64-bitovy integer s nulou v okamziku epochy, misto zmeneno=current_timestamp
> v triggerech nastavovat zmeneno=extract(epoch from current_timestamp)
> a konverzi na citelny format delat skutecne az v prezentacni vrstve.

 Ano to je mozne, ale pak se pripravujes o moznost pracovat s tim v
dotazech jako s casem. Podle mne ta rezije na prevod timestampu na cislo
neni zase tak velka, aby se obecne vyplatilo to nejak obchazet.

	karel

-- 
Karel Zak <zakkr na zf.jcu.cz>



Další informace o konferenci Databases