Am a bit confused -which one comes first? 1) the 'data'||currval('id01_col1_seq') is parsed first : which means it takes the current session's currval 2) then the insert is attempted which causes a sequence.nextval to be performed which means that 'data'||currval('id01_col1_seq')will be different from the sequence's value
or 1) an insert is attempted which causes a sequence.nextval to be performed and then 2) the cols are parsed for the insert so the 'data'||currval('id01_col1_seq') has the correct value I observe the latter on my single session notebook instance of postgres. Regards, AK On Tue, Jul 22, 2014 at 10:53 PM, Albe Laurenz <laurenz.a...@wien.gv.at> wrote: > David G Johnston wrote: > >> Also, I think that your method is vulnerable to race conditions: > >> If somebody else increments the sequence between the INSERT and > >> "SELECT lastval()" you'd get a wrong value. > > > > Uh, no. It returns that last value issued in the same session - which is > > race-proof. > > > > http://www.postgresql.org/docs/9.3/static/functions-sequence.html > > > > Both of them are useful and in the case of inserting multiple rows you > have > > to use RETURNING. Beyond though it is largely personal preference and > > ease-of-use (dealing with a set when you know a single value is all that > is > > necessary can be annoying). > > You are right, I mixed it up with "currval". > > Yours, > Laurenz Albe > > -- > Sent via pgsql-general mailing list (pgsql-general@postgresql.org) > To make changes to your subscription: > http://www.postgresql.org/mailpref/pgsql-general >