"woger151" <woger151@xxxxxxxxxxxxxxxx> writes: > Reading around, I've seen the following methods discussed: > (1) Within a transation, do the INSERT, and then do a SELECT CURVAL > (2) Not necessarily within a transaction, get a candidate for the pk using > SELECT NEXTVAL, then INSERT the row. > (3) Use LASTVAL You don't need a transaction for any of these; at least not unless you're using connection-pooling code that might swap you to a different physical session at transaction boundaries. Since all of them are going to cost you two round trips to the server, it's probably about a wash performance-wise. I'd tend to go with (2) just because it requires no assumptions about anything. Even without the session-change risk, (1) and especially (3) can bite you in a sufficiently complex application: some other part of your own code could touch this or another sequence between the two steps. regards, tom lane