pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: fabrizio picca <fabrizio.picca@gmail.com>
To: Michael Fuhr <mike@fuhr.org>
Cc: pgsql-interfaces@postgresql.org
Subject: Re: help needed on SPI_modifytuple.
Date: Mon, 12 Sep 2005 18:01:39 +0200
Message-ID: <1532344d05091209012fc914df@mail.gmail.com> (raw)
In-Reply-To: <20050912153646.GA55025@winnie.fuhr.org>
References: <1532344d050912071740e7c5d9@mail.gmail.com>
	<20050912153646.GA55025@winnie.fuhr.org>

thanks a lot Michael, you've just hit the problem!
Now everything works fine!

Thanks again
Fabrizio

On 9/12/05, Michael Fuhr <mike@fuhr.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



view thread (3+ messages)

Message-ID: <1532344d05091209012fc914df@mail.gmail.com>
Permalink:  ../1532344d05091209012fc914df@mail.gmail.com/
Also on:    postgresql.org/message-id/1532344d05091209012fc914df@mail.gmail.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: fabrizio.picca@gmail.com, mike@fuhr.org
  Subject: Re: help needed on SPI_modifytuple.
  In-Reply-To: <1532344d05091209012fc914df@mail.gmail.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox