If you have a trigger on your table that inserts a record in a table and shares the same sequence, what value do you get back, the triggered curval, or the currently inserted one?
Being a lazy bum, this is why I still prefer the "get key - insert record" approach. Less brain power required. ;-) Larry On 7/7/05, Michael Fuhr <[EMAIL PROTECTED]> wrote: > On Thu, Jul 07, 2005 at 01:14:33PM -0700, Theodore Petrosky wrote: > > > > you have to use currval inside a transaction... > > Not true. Have you observed otherwise? > > > begin; > > insert something that increments the counter; > > select currval('sequence_name'); > > end; > > > > using currval inside a transaction guarantees that the > > value is correct for your insert statement and has not > > changed by another insert statement. > > currval() returns the most recently obtained value from the sequence > in the current session, regardless of what other sessions are doing > or whether the current session is in a transaction. See the > documentation and the FAQ: > > http://www.postgresql.org/docs/8.0/static/functions-sequence.html > > "Notice that because this is returning a session-local value, it > gives a predictable answer whether or not other sessions have > executed nextval since the current session did." > > http://www.postgresql.org/docs/faqs.FAQ.html#4.11.3 > > "4.11.3) Doesn't currval() lead to a race condition with other users? > > "No. currval() returns the current value assigned by your session, not by > all sessions." > > You can do experiments to confirm what the documentation states. > If you see different behavior then please put together a self-contained > test case and report it as a bug. > > -- > Michael Fuhr > http://www.fuhr.org/~mfuhr/ > > ---------------------------(end of broadcast)--------------------------- > TIP 4: Don't 'kill -9' the postmaster > ---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org