I found a couple of other questions on this topic. This one...
mysql_insert_id alternative for postgresql
...and the manual seem to indicate that you can call lastval()
any time and it will work as expected. But this one...
...seems to state that it has to be within a transaction. So my question is this: can I just wait as long as I like before querying for lastval()
(without a transaction)? And is that reliable in the face of many concurrent connections?
INSERT, UPDATE and DELETE in PostgreSQL have a RETURNING clause which means you can do:
INSERT INTO ....
RETURNING id;
Then the query will return the value it inserted for id for each row inserted. Saves a roundtrip to the server.