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