db-torque-dev mailing list archives

Sean Laurent wrote:
>I appreciate the response, Scott. However, with all due respect, you're
>incorrect.
>
>To demonstrate this, I created a simple project which contained a single table
>with two columns: an autoincrement primary key and a value (type double).
>Initially, the table was completely empty. After initializing Torque, I
>created a new object, set the value and attempted to save it. I got the
>following error:
>
> org.postgresql.util.PSQLException: ERROR: currval of sequence "mytest_seq"
>is not yet defined in this session
>
>
Can you please post the schema you used for this demonstration. I am
curious to know if you are telling torque the name of the sequence to
use (I suspect not).
Have you read the following?
http://nagoya.apache.org/wiki/apachewiki.cgi?TorqueProjectPages/PostgreSQLFAQ
>Second, I stepped through the entire code and you are partially correct: the
>attempt to retrieve the current sequence value occurs after the insert.
>However, the insert has not technically completed, since it's wrapped in a
>transaction.
>
>Under the hood, the insert should be triggering a call nextval() inside
>PostgreSQL. Unfortunately, something still doesn't work correctly. I have a
>couple of guesses, but I'm not certain which, if any, are correct. It could
>be because the insert and the call to currval are all wrapped in the one
>giant transaction. It could be because the automatic trigger to nextval() is
>technically in a different session. I'm not certain.
>
>Regardless, the end result is that the call to currval() always fails. I
>refer you to section 9.11 Sequence-Manipulation Functions in the PostgreSQL
>7.4 documentation:
>http://www.postgresql.org/docs/7.4/interactive/functions-sequence.html
>
>---snip---
>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 even if other sessions are
>executing nextval meanwhile.
>---snip---
>
>Please notice that concurrency is not an issue when calling nextval(). The
>easiest solution is simply to call nextval() instead of currval() in
>DBPostgres.java:117.
>
>
You are probably right - it most likely just dishes out sequence values
ignoring whether or not they are actually used, thus no concurrency issue.
>So, I respectfully would like to know what I need to do help get this fixed in
>the main code base. I've already modified my own copy of Torque, but I would
>prefer to see this fixed everywhere. Your assistance would be greatly
>appreciated.
>
>
I use PostgreSQL as my primary database server and would thus be very
surprised if this turns out to be an issue.
Scott
--
Scott Eade
Backstage Technologies Pty. Ltd.
http://www.backstagetech.com.au
---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org
For additional commands, e-mail: torque-dev-help@db.apache.org