Re: Variable NEW en una funcion para un trigger

From: "Fernando Moreno" <azazel(dot)7(at)gmail(dot)com>
To: "Juan Luis Echeverria" <juanluise(at)usa(dot)net>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Variable NEW en una funcion para un trigger
Date: 2008-05-02 18:59:41
Message-ID: b1c45530805021159q2865493aj88e31457f31270fb@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

¿Recuerdas ese "RETURN NEW;" al final de la función?

De la documentación de postgres:
"For row-level INSERT and UPDATE triggers only, the *returned row* becomes
the row that *will be inserted* or will replace the row being updated. This
allows the trigger function to modify the row being inserted or updated. "
...
"To alter the row to be stored, it is possible to *replace single values
directly in NEW and return the modified NEW* (lo que haces
actualmente)* ,*or to
*build a complete new record/row to return* (lo que yo te propongo).

Como te dije anteriormente, esto sólo funcionará si nunca vas a consultar el
valor de NEW.idsyncxxx y NEW.syncxxx, pero sí es posible que les quieras
asignar un nuevo valor. En ese caso, creas una nueva variable RECORD, con
los mismos datos de NEW (los que puedas obtener directamente), más los dos
campos que calculas en tiempo de ejecución.

2008/5/2 Juan Luis Echeverria <juanluise(at)usa(dot)net>:

> Fernando Moreno escribio:
> > Pienso que un camino alternativo podría ser el siguiente: Si las
> columnas
> > con nombres cambiantes (por lo que veo son dos) sólo las usas para
> asignarle
> > valores que se insertarán/actualizarán, es decir, como valores "de lado
> izquierdo"
> > y nunca como "de lado derecho" (no consultas sus valores), puedes crear
> una
> > variable RECORD a la que asignes mediante un SELECT INTO, los valores
> comunes
> > desde NEW, y los reasignados, con las variables new_idsync y new_sync.
> > Regresando ese nuevo RECORD conseguirías el efecto deseado, supongo :) .
>
> Talvez entiendo mal tu propuesta pero esta implica que despues de lo que
> propones debo hacer un UPDATE sobre la tabla afectada y alli ya entra
> conocer la llave de la tabla lo que significa que la funcion debe ser
> especifica por cada tabla.
> Alvaro Herrera me sugirio usar pl/perl y creo que voy a investigar algo
> de
> ese lenguaje hoy en la tarde.
> Saludos.
>
> --------------------
> Juan Luis Echeverria
> juanluise(at)cresolt(dot)info
>
>
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Martin Marques 2008-05-02 19:26:56 Re: WAL - Momento de escritura a disco
Previous Message mAyErLiNg .M. 2008-05-02 18:58:10 RE: Restricciones