2011-06-26 15 views
12

Znalazłem kilka innych pytań na ten temat. Ten ...PHP Postgres: Pobierz ostatni identyfikator Wstaw

mysql_insert_id alternative for postgresql

... i the manual wydają się wskazywać, że można zadzwonić lastval() dowolny czas i będzie działać zgodnie z oczekiwaniami. Ale ten ...

Postgresql and PHP: is the currval a efficent way to retrieve the last row inserted id, in a multiuser application?

... wydaje się stwierdzenie, że musi być w obrębie transakcji. Moje pytanie brzmi: czy mogę po prostu czekać tak długo, jak chcę, przed zapytaniem o numer lastval() (bez transakcji)? Czy jest to niezawodne w obliczu wielu równoczesnych połączeń?

+0

Sekwencje zależą od sesji, a nie od transakcji. Ale nie jest dobrze czekać i wykonywać inne zapytania w międzyczasie, możesz otrzymać ostatnią z innych zapytań. – jordani

Odpowiedz

28

INSERT, UPDATE i DELETE w PostgreSQL posiada powrocie klauzulę, która oznacza, że ​​można zrobić:

INSERT INTO .... 
RETURNING id; 

Następnie kwerenda zwróci wartość jest włożona do identyfikatora dla każdego wiersza wstawionego. Zapisuje objazd na serwerze.

+0

Dziękuję bardzo za tę odpowiedź! Dokładnie to, czego potrzebowałem, zmniejsza o połowę liczbę zapytań, które muszę wykonać w przypadku niektórych operacji. –

+2

Dzięki! BTW, w razie potrzeby, możesz zwrócić wiele wartości - RETURNING * zwróci cały wstawiony wiersz. – SamGoody

+0

Co zrobić, jeśli nie znasz nazwy pola identyfikatora? – JoeTidee

6

Tak, the sequence functions zapewniają wielu-bezpieczne metody uzyskiwania kolejnych wartości sekwencji z obiektów sekwencji.

+1

Bardzo się cieszę, że sekwencje są teraz ANSI - AUTOINCREMENT/TOŻSAMOŚĆ są zbyt ograniczone. –

+0

Doskonale, dzięki. – Jonah

Powiązane problemy