Postgres 7.1.3, PL/pgSQL, trigger - rozbor

otakarek na post.cz otakarek na post.cz
Středa Říjen 23 14:43:07 CEST 2002


Mam tabulky: tab_A,tab_B,tab_C a tab_T, trigger tr_A

Potrebuji si univerzalnim triggerem(tr_A) zajistit referencni
integritu konkretniho sloupce(napr. tab_T.sl_A) do vice
tabulek(tab_A,tab_B,tab_C) i do tabulky samotne(tab_T) pro potreby
rekurze(nad tab_T). 

Diky pomocnemu sloupci(tab_T.sl_N) a prislusneho trigeru(tr_A) mam
sestaveny sloupec, ktery obsahuje rekurzivni strom oddelenych
identifikatoru za sebou (predpoklada se omezeny pocet "zanoreni").

Az do ted nemam zadny problem. Pokud ovsem chci zajistovat integritu
nad tab_T.sl_A, musi se to tykat i akci ON DELETE. Z vykonostnich
duvodu chci v triggeru tr_A pouzit jen jeden SQL DELETE nad
tab_T.sl_N. V tomto bode potrebuji docasne "zakazat" volani akci ON
DELETE na tab_T (bohuzel DELETE nad tab_T.sl_N maze vice zaznamu a
nezadoucne vyvolava onen tr_A).

Nakonec tr_A provede sumarni operace a ulozi je do specialni tmp
tabulky(nad tab_T).

Ta predstava rekurzivniho volani(resp. mazani a sumarizovani) nad
treba 1000 radky me deprimuje. RULE by na to stacila, ale co ty
sumarni operace, ktere chci na zaver operaci nad tab_T provest? Mam
pouzit interni "semafory" v ramci triggeru tr_A?

Diky za radu. Doufam, ze znaceni, ktere jsem pouzil neni moc
pras.... ;-)

Karel Splichal

>On Wed, Oct 23, 2002 at 11:09:34AM +0200, >otakarek na post.cz wrote:
>
>> potrebuji informaci ohledne triggeru (procedura v PL/pgSQL) ktery
>> bude vyvolan po ON DELETE a bude obsahovat SQL DELETE FROM ze
stejne >> tabulky. Problem je v tom, jak zamezit spousteni triggeru
v tele
>> spoustene procedury (konkretne na zminene DELETE) - tedy jak
zamezit >> nezadoucimu rekurzivnimu spousteni triggeru.
>
>
> Vymyslet to uplne jinak :-) Podivejte se treba na RULE, nejsem si
> jist, ale mozna by vam to mohlo pomoci. O co jde?
>
>    Karel

Zajímavé reklamní produkty, výhodná cena, cílení na uživatele
...http://reklama.volny.cz


Další informace o konferenci Databases