postgresql a moj pokus o trigre
Karel Zak
zakkr na zf.jcu.cz
Pondělí Únor 26 16:05:34 CET 2001
On Mon, Feb 26, 2001 at 03:13:31PM +0100, Blasko Marek wrote:
> > Hlavou, jinak to nepujde :-) O co v tom triggeru ma jit?
> >
> > Pokud o zmenu dat, ktera jsou do tabulky vkladana, tak:
> >
> > BEGIN
> > NEW.xxx = yyy();
> > RETURN NEW;
> > END;
>
> a ak v povodnom update nebol vyplneny dany stlpec tak to pojde tiez?
Ano, proste pro vsechny update bude v NEW.xxx nastavena dana hodnota, at se
deje co chcete.
Exkurze do vnitronosti PG: pro kazdy trigger je dostupna struktura
obsahujici dva zaznamy (v plpgsql se to jmenuje NEW a OLD) a NEW je vzdy
kopie OLD s tim, ze tam jsou aplikovane zmeny, ktere user udelal nastavil v
prikazu UPDATE. Dostupne jsou v triggeru vzdy cela data (tuple).
Snad jen u INSERTu tam je pochopitelne jen NEW.
Pokud se pamatuji tak vas trigger byl ale typu AFTER, to znamena, ze
to co provedete za zmeny na NEW se na datech v tabulce neprojevuje! Musite
pouzit AFTER pokud jde o to editovat NEW zaznam.
Pochopitelne efektivni by pro vas bylo neco jako:
IF NEW.xxx != OLD.xxx THEN
NEW.xxx = func();
Karel
PS. lidi to je z toho, ze nepouzivate na triggery C -- tam je to naprosto
transparentni :-)
--
Karel Zak <zakkr na zf.jcu.cz>
http://home.zf.jcu.cz/~zakkr/
C, PostgreSQL, PHP, WWW, http://docs.linux.cz, http://mape.jcu.cz
Další informace o konferenci Linux