This subject has been discussed literally a thousand times before. If currval didn't work properly with parallel transactions I'm pretty sure someone would have noticed and fixed it by now.
http://www.postgresql.org/docs/7.4/static/functions-sequence.html explains all about sequences. On Fri, 2004-06-25 at 04:27, NMB Webmaster wrote: > But if someone else runs the same transaction in the same time what value does > "currval('sequence')" return? That one of the first transaction or that one of the > other transaction? Moreover, field id is a unique primary key, it does not accept > duplicates. > > On 25/06/2004 11.58, Michal TÃborskà <[EMAIL PROTECTED]> wrote: > >Ago wrote: > > > >> I have a PHP script that runs this query on Postgresql 7.2.3. Once > >it inserts the record in the e_catalog table it takes the id value > >and then inserts it in the e_catalog_cache table, the two tables > >must have the same rows and values. > >> I thought rhat inside a transaction block the subquery SELECT > >MAX(id) FROM e_catalog was safe from concurrent same transactions, > >that is the id value from SELECT MAX(id) FROM e_catalog was exactly > >that one inserted in the previous statement, but reading some threads > >in this mailing list I have some doubt now. > >> This is the query: > >> > >> BEGIN WORK; > >> INSERT INTO e_catalog(id, name, descr) VALUES (nextval('sequence'), > >'$Name', '$Descr'); > >> INSERT INTO e_catalog_cache(id, name, descr) VALUES ((SELECT MAX(id) > >FROM e_catalog), '$Name', '$Descr'); > >> > >> COMMIT WORK; > > > >You want: > >BEGIN WORK; > >INSERT INTO e_catalog(id, name, descr) VALUES (nextval('sequence'), > > '$Name', '$Descr'); > >INSERT INTO e_catalog_cache(id, name, descr) VALUES currval('sequence'), > > '$Name', '$Descr'); > >COMMIT WORK; > > > >-- > >Michal Taborsky > >http://www.taborsky.cz > > > > > > > > > > ---------------------------(end of broadcast)--------------------------- > TIP 5: Have you checked our extensive FAQ? > > http://www.postgresql.org/docs/faqs/FAQ.html > ---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly