Re: Update en trigger disparado por update. Es recursivo?

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)

In response to

Browse pgsql-es-ayuda by date

  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?