getting the oid for a new tuple in a BEFORE trigger
Hi,
we need to control database changes within BEFORE triggers.
There is no problem with triggers called by update, but there is
a problem with triggers called by insert.
We strongly need to know the oid of a newly inserted tuple. In this case, we
use tg_newtuple of the TriggerData structure passed to thetrigger function,
and its t_data -> t_oid will have the value '0'.
Using BEFORE and AFTER triggers would make our lives much harder.
Is there any way (even hack) to get the oid the newly inserted tuple will
receive?
Thank you very much,
Markus
hi,
Idon't know the best way but how about a quick insert in a temp table and
adding 1 to the inserted oid column each time the trigger will run.!
regards
Omid
From: Markus Wagner <wagner@imsd.uni-mainz.de>
To: pgsql-general@postgresql.org, pgsql-sql@postgresql.org,
pgsql-hackers@postgresql.org
Subject: [SQL] getting the oid for a new tuple in a BEFORE trigger
Date: Wed, 29 Aug 2001 11:15:08 +0200Hi,
we need to control database changes within BEFORE triggers.
There is no problem with triggers called by update, but there is
a problem with triggers called by insert.We strongly need to know the oid of a newly inserted tuple. In this case,
we
use tg_newtuple of the TriggerData structure passed to thetrigger function,
and its t_data -> t_oid will have the value '0'.Using BEFORE and AFTER triggers would make our lives much harder.
Is there any way (even hack) to get the oid the newly inserted tuple will
receive?Thank you very much,
Markus
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
Import Notes
Resolved by subject fallback
Mark,
The responses to your problem are gonna be kinda slow, as 2/3 of the
core team, and many of the users, are at the Expo right now (and if
anyone on the list is in the SF Bay Area, join us! BOF session
tonight!)
we need to control database changes within BEFORE triggers.
There is no problem with triggers called by update, but there is
a problem with triggers called by insert.
What problem?
We strongly need to know the oid of a newly inserted tuple. In this
case, we
use tg_newtuple of the TriggerData structure passed to thetrigger
function,
and its t_data -> t_oid will have the value '0'.Using BEFORE and AFTER triggers would make our lives much harder.
Once again, why?
Is there any way (even hack) to get the oid the newly inserted tuple
will
receive?
This specific answer will have to come from someone else.
I could suggest a couple of workarounds, if you gave a fuller
description of exactly what you're trying to accomplish.
-Josh Berkus
P.S. Please do not cross-post to more than 2 lists at a time. The
Postgres lists have been kept to a managable volume to date; let's keep
it that way.
______AGLIO DATABASE SOLUTIONS___________________________
Josh Berkus
Complete information technology josh@agliodbs.com
and data management solutions (415) 565-7293
for law firms, small businesses fax 621-2533
and non-profit organizations. San Francisco
On Wednesday 29 August 2001 20:05, you wrote:
hi,
Idon't know the best way but how about a quick insert in a temp table and
adding 1 to the inserted oid column each time the trigger will run.!
regards
As you don't know how many users access the server concurrently and in which
order they will be served you will probably noty get what you want unless you
work on a single user single client-server connection all the time.
Horst
On Wed, Aug 29, 2001 at 11:15:08AM +0200, Markus Wagner wrote:
Hi,
we need to control database changes within BEFORE triggers.
There is no problem with triggers called by update, but there is
a problem with triggers called by insert.We strongly need to know the oid of a newly inserted tuple. In this case, we
use tg_newtuple of the TriggerData structure passed to thetrigger function,
and its t_data -> t_oid will have the value '0'.Using BEFORE and AFTER triggers would make our lives much harder.
Is there any way (even hack) to get the oid the newly inserted tuple will
receive?Thank you very much,
Markus
---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanlyend of the original message
Read section 24.2.5.4 'Obtaining other results status' of the Programmer's
Guide. This is for the PL/pgSQL language, though.
Francesco Casadei
Markus Wagner writes:
we need to control database changes within BEFORE triggers.
There is no problem with triggers called by update, but there is
a problem with triggers called by insert.We strongly need to know the oid of a newly inserted tuple. In this case, we
use tg_newtuple of the TriggerData structure passed to thetrigger function,
and its t_data -> t_oid will have the value '0'.
A less hackish way to do this might be using a sequence object for the
primary key and fetch the next sequence value manually.
--
Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
we need to control database changes within BEFORE triggers.
There is no problem with triggers called by update, but there is
a problem with triggers called by insert.We strongly need to know the oid of a newly inserted tuple.
In this case, we use tg_newtuple of the TriggerData structure
passed to thetrigger function, and its t_data -> t_oid will
have the value '0'.Using BEFORE and AFTER triggers would make our lives much harder.
Is there any way (even hack) to get the oid the newly
inserted tuple will receive?
Just set t_data->t_oid = newoid() - this is what backend does
in heapam.c:heap_insert().
Vadim
Import Notes
Resolved by subject fallback
we need to control database changes within BEFORE triggers.
There is no problem with triggers called by update, but there is
a problem with triggers called by insert.We strongly need to know the oid of a newly inserted tuple.
In this case, we use tg_newtuple of the TriggerData structure
passed to thetrigger function, and its t_data -> t_oid will
have the value '0'.Using BEFORE and AFTER triggers would make our lives much harder.
Is there any way (even hack) to get the oid the newly
inserted tuple will receive?Just set t_data->t_oid = newoid() - this is what backend does
in heapam.c:heap_insert().
Does that work? Doesn't that get overwritten when the actual INSERT
happens?
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026