From: | Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org> |
---|---|
To: | Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar> |
Cc: | Lista Ayuda Pgsql <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Update en trigger disparado por update. Es recursivo? |
Date: | 2005-07-13 16:43:53 |
Message-ID: | 20050713164353.GA32223@alvh.no-ip.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On Wed, Jul 13, 2005 at 01:21:09PM -0300, Sebastián Villalba wrote:
> Hola amigos. Antes que me olvide. Tengo Postgres 8.03 en Linux.
> Tengo un trigger que controla que cuando se actualice un campo en una tabla,
> ese campo sea como máximo igual a otro valor de campo de otra tabla. Entonces
> hice la siguiente función (volatil) que retorna un trigger:
>
> CREATE OR REPLACE FUNCTION "tg_updateCupoCursoPerfil"() RETURNS trigger AS $$
> DECLARE
> recCurso RECORD;
> BEGIN
> SELECT INTO recCurso * FROM cursos WHERE id = new.curso_id;
> IF (new.cupo > recCurso.cupo) THEN
> new.cupo = recCurso.cupo;
> END IF;
> UPDATE cupocursoperfil SET cupo = new.cupo WHERE new.perfil_id =
> old.perfil_id AND new.curso_id = old.curso_id;
> RETURN NULL;
> END;
> $$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER
Hola, este trigger es infinitamente recursivo AFAICS, es decir, se
dispara un nuevo trigger para el UPDATE que se genera dentro del
trigger.
Para resolver tu problema, considera que si lo que quieres es alterar el
registro que se esta ingresando al momento de ingresarlo, no necesitas
invocar UPDATE; basta con que alteres el pseudo-registro NEW. Eso ya lo
estas haciendo. Lo que no entiendo es para que haces el UPDATE.
Observa que la funcion debe retornar NEW en lugar de NULL. (Los
triggers "BEFORE" nunca deben retornar NULL.)
--
Alvaro Herrera (<alvherre[a]alvh.no-ip.org>)
"El destino baraja y nosotros jugamos" (A. Schopenhauer)
From | Date | Subject | |
---|---|---|---|
Next Message | Juan Pablo GO | 2005-07-13 16:45:20 | Re: Update en trigger disparado por update. Es recursivo? |
Previous Message | Sebastián Villalba | 2005-07-13 16:42:11 | Re: Update en trigger disparado por update. Es recursivo? |