Re: Whats the correct way to change trigdata->tg_relation

Lists: pgsql-hackers
From: Charles Gomes <charlesrg(at)outlook(dot)com>
To: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Whats the correct way to change trigdata->tg_relation
Date: 2012-12-28 18:06:44
Message-ID: BLU002-W21A0A7B675A540F159076CAB3F0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: Postg토토 핫SQL :

I'm creating a simple trigger that will be called during an insert and change the destination table.
All values are going to be preserved, just the destination table will be different.

From what I see I can't modify trigdata->tg_relation.

All examples use: return Datum(trigdata->tg_trigtuple); // however tg_relation does not belong there. I'm trying to avoind having to do a SPI_EXEC;
Should I create a new heap_tuple and call heap_insert() and then Return Datum(NULL); ? Or is there another more straight forward way of doing it?  Looks like if I call heap_insert I will have to update the indexes somehow.

Thank you,
Charles


From: Robert Haas <robertmhaas(at)gmail(dot)com>
To: Charles Gomes <charlesrg(at)outlook(dot)com>
Cc: "pgsql-hackers(at)postgresql(dot)org" <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Whats the correct way to change trigdata->tg_relation
Date: 2013-01-02 21:51:40
Message-ID: CA+Tgmoa6j-_fiknTUosq8vyTC6=RdW543f4ymM2jWgp=TeZBpQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers

On Fri, Dec 28, 2012 at 1:06 PM, Charles Gomes <charlesrg(at)outlook(dot)com> wrote:
> I'm creating a simple trigger that will be called during an insert and change the destination table.
> All values are going to be preserved, just the destination table will be different.
>
> From what I see I can't modify trigdata->tg_relation.
>
> All examples use: return Datum(trigdata->tg_trigtuple); // however tg_relation does not belong there. I'm trying to avoind having to do a SPI_EXEC;
> Should I create a new heap_tuple and call heap_insert() and then Return Datum(NULL); ? Or is there another more straight forward way of doing it? Looks like if I call heap_insert I will have to update the indexes somehow.

I think you need to use SPI_EXEC. Otherwise something horrible will
probably happen.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company