++ for you eclark for pointing me to the docs one more time :-)
I always tought it was correct, since I read this:
nextval
Advance the sequence object to its next value and return that value. This is done atomically: even if multiple sessions execute nextval concurrently, each will safely receive a distinct sequence value.
currval
Return the value most recently obtained by nextval for this sequence in the current session. (An error is reported if nextval has never been called for this sequence in this session.) 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.
About my problem:
I'm rewriting everything using:
use DBI qw(:sql_types);
.....
$sth->bind_param(1,undef,SQL_....);
$sth->execute(<values>);
and spliting the multiple statements I have.
Thanks,
Miguel | [reply] [d/l] |
Actually you were correct, I'm wrong. My memory must be fading.
That said, I doubt you'd be able to convince anyone in the DBI community that running multiple statements in prepare is a good thing. I'm still curious why you were locking a table, I've never felt the need to do that in Postgres, just let MVCC take care of it.
| [reply] |
Umm... What? The call to 'currval' will most certainly do exactly what is intended by the code. Because any call to currval returns the database _session's_ notion of the most recent squence value, Postgres will return whatever the last call to nextval (including column's DEFAULT constraint) returned *only for that session*. And because the INSERT and SELECT statements are in a single string there is no chance of another call to nextval between the INSERT and SELECT. | [reply] |