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 Test