currval() race condition on server? - Mailing list pgsql-jdbc

From Adriaan Joubert
Subject currval() race condition on server?
Date
Msg-id 453CC859.8070306@albourne.com
Whole thread Raw
Responses Re: currval() race condition on server?  (Achilleas Mantzios <achill@matrix.gatewaynet.com>)
Re: currval() race condition on server?  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: currval() race condition on server?  (Dave Cramer <pg@fastcrypt.com>)
List pgsql-jdbc
Hi,

    I've run into an intermittent problem with our code recently. We have
the following set-up:

table A : some data table
table B : a history table for table A

A trigger copies the old version of a row into table B whenever an
update is done on table A. Both A and B contain an audit number, and the
trigger obtains an audit number from a sequence and inserts it into the
row inserted into table A.

For some bookkeeping purposes I need the new audit number back from the
update, so I submit a prepared statement through jdbc of the form

UPDATE A SET ....; SELECT currval('ip_audit_seq');

On the first call I get

  ERROR: currval of sequence "ip_audit_seq" is not yet defined in this
session

Note that this works without any trouble if I issue the commands in a
transaction through psql, and this used to work in earlier versions of
postgres.

We have a lot of users on very high latency links, so it is important
for the responsiveness of the application to try to do the update and
select in a single database trip.

So I'm wondering whether there is some type of race condition, where the
selection of the new value from ip_audit_seq is not available to the
currval function straight away? Anybody got any ideas on this?

Cheers,

Adriaan

pgsql-jdbc by date:

Previous
From: Bill Boggins
Date:
Subject: Connecting to SSL PostgreSQL with WebStart Application
Next
From: Achilleas Mantzios
Date:
Subject: Re: currval() race condition on server?