问题
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...
Postgresql and PHP: is the currval a efficent way to retrieve the last row inserted id, in a multiuser application?
...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?
回答1:
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.
回答2:
Yes, the sequence functions provide multiuser-safe methods for obtaining successive sequence values from sequence objects.
来源:https://stackoverflow.com/questions/6485778/php-postgres-get-last-insert-id