> ......... In my case, I used currval(). Basically: > > SELECT currval('table_field_seq'); > > will return the most recently assigned value to the field *by the > current > backend* which means: > > - There's no danger of a race condition (another user creating a > record in > the time between your creating the record and calling currval); BUT > - You must be using the same backend as you did on the creation. This is the way I've used before. It seems the the better way (thanks to Charles Martin <[EMAIL PROTECTED]>) is: 1) Do INSERT PGresult* res = PQexec(conn, "INSERT......") 2) Get the OID of the just inserted record e.g const char* oid = PQoidStatus(res) 3) Select the id of this record: res = PQexec(conn, "SELECT id .... WHERE OID=....");