Triggers en C

From: Juan Pablo Espino <jp(dot)espino(at)gmail(dot)com>
To: Ayuda Postgres <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Triggers en C
Date: 2005-03-07 23:34:13
Message-ID: 3e7daec105030715341c9a7620@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Un cordial saludo a todos.

Tengo el siguiente Trigger en C

#include "postgres.h"
#include "executor/spi.h"
#include "commands/trigger.h"

extern Datum trigf(PG_FUNCTION_ARGS);

PG_FUNCTION_INFO_V1(trig_jp);

Datum
trig_jp(PG_FUNCTION_ARGS)
{
TriggerData *trigdata = (TriggerData *) fcinfo->context;
HeapTuple rettuple;
int32 ret;

if (TRIGGER_FIRED_BY_DELETE(trigdata->tg_event))
{
SPI_connect();
ret = SPI_exec("INSERT INTO mensajes values('prueba', nivel())", 1);
elog(INFO, "La variable ret devuelve %d", ret);
SPI_finish();
return PointerGetDatum(NULL);
}
else rettuple = trigdata->tg_trigtuple;
return PointerGetDatum(NULL);
}

Lo que quiero hacer simplemente es un insert cada vez que se intente
un delete sobre la tabla mensajes, ¿para que? para nada realmente,
sólo hago pruebas. En eso no hay problemas. Si en vez de insert hago
un delete entonces caigo logicamente en un ciclo infinito, hay alguna
manera de evitarlo, hace algun tiempo alguien trató el tema pero no lo
he encontrado en los repositorios de la lista.

Bueno lo segundo es que quiero ver que hace realmente la variable ret
ya que no me queda claro qué es lo que devuelve SPI_exec en la
documentación aparece que devuelve un entero, pensé que era la
cantidad de filas de la tabla, pero resulta que ret siempre me
devuelve 7, aunque cambie la cantidad de registros en la tabla o
aunque cambie el numero 1 de la funcion SPI_exec que indica el numero
de filas a procesar.

Gracias de antemano por ayudarme a entender Postgres. Saludos.

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Manuel Sugawara 2005-03-07 23:46:24 Re: Triggers en C
Previous Message Alvaro Herrera 2005-03-07 23:31:46 Re: Conectar a una base de datos y consultardatos de otra