From: | fabrizio picca <fabrizio(dot)picca(at)gmail(dot)com> |
---|---|
To: | Michael Fuhr <mike(at)fuhr(dot)org> |
Cc: | pgsql-interfaces(at)postgresql(dot)org |
Subject: | Re: help needed on SPI_modifytuple. |
Date: | 2005-09-12 16:01:39 |
Message-ID: | 1532344d05091209012fc914df@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-interfaces |
thanks a lot Michael, you've just hit the problem!
Now everything works fine!
Thanks again
Fabrizio
On 9/12/05, Michael Fuhr <mike(at)fuhr(dot)org> wrote:
> On Mon, Sep 12, 2005 at 04:17:33PM +0200, fabrizio picca wrote:
> > I'm trying to sipmply modify a tuple before it will be inserted in the db.
> > The problem is that when it try to insert the modified tuple with
> > SPI_modifytuple all i get is a SPI_ERROR_ARGUMENT negative (-6) .
> > Could someone help me? i'm reallygoing crazy.
> >
> > What i did is just a fire-before C trigger that acts like this:
>
> Is the trigger fired on INSERT, UPDATE, or both?
>
> > oldtuple = trigdata->tg_trigtuple;
> > newtuple = trigdata->tg_newtuple;
> [...]
> > rettuple=SPI_modifytuple(rel,newtuple,1,&attnum,&new_value,&isnull);
>
> I didn't look closely at the rest of the code, but if the trigger
> is fired on INSERT then you should pass oldtuple; newtuple will be
> NULL, causing SPI_modifytuple() to fail with SPI_ERROR_ARGUMENT.
> Here's an extract from "Writing Trigger Functions in C" in the
> "Triggers" chapter of the documentation:
>
> tg_trigtuple
>
> A pointer to the row for which the trigger was fired. This is
> the row being inserted, updated, or deleted. If this trigger was
> fired for an INSERT or DELETE then this is what you should return
> from the function if you don't want to replace the row with a
> different one (in the case of INSERT) or skip the operation.
>
> tg_newtuple
>
> A pointer to the new version of the row, if the trigger was fired
> for an UPDATE, and NULL if it is for an INSERT or a DELETE. This
> is what you have to return from the function if the event is an
> UPDATE and you don't want to replace this row by a different one
> or skip the operation.
>
> --
> Michael Fuhr
>
--
L'Estetica del lavoro è lo spettacolo della merce umana (Area)
--
http://www.fabpicca.net
From | Date | Subject | |
---|---|---|---|
Next Message | David Wall | 2005-09-12 16:17:20 | Backup 7.3 was 19GB, restored on 8.0.3 was only 4GB |
Previous Message | Michael Fuhr | 2005-09-12 15:36:46 | Re: help needed on SPI_modifytuple. |