Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP Postgres: Get Last Insert ID

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?

like image 510
Jonah Avatar asked Jun 26 '11 18:06

Jonah


2 Answers

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.

like image 148
Eelke Avatar answered Oct 19 '22 23:10

Eelke


Yes, the sequence functions provide multiuser-safe methods for obtaining successive sequence values from sequence objects.

like image 6
Sjoerd Avatar answered Oct 20 '22 01:10

Sjoerd