2011-06-26 7 views
12

このトピックに関する他の質問がいくつか見つかりました。この1 ...PHP Postgres:最後の挿入IDを取得

mysql_insert_id alternative for postgresql

...とthe manualはあなたがいつでもlastval()を呼び出すことができることを示しているように見えると期待どおりに動作します。しかし、この1 ...

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

...それはトランザクション内でなければならないと述べているように思われます。だから私の質問はこれです:ちょうど私が好きなだけ待つことができますlastval()(トランザクションなし)を照会する前に?そして、それは同時に多くの同時接続にも信頼できますか?

+0

シーケンスはトランザクションではなくセッションに依存します。しかし、それは他のクエリを待って実行するのは良いことではありませんが、他のクエリのlastvalを受け取ることがあります。 – jordani

答えて

28

INSERT、UPDATEおよびPostgreSQLではDELETEは、あなたが行うことができることを意味RETURNING句を持っている:

INSERT INTO .... 
RETURNING id; 

その後のクエリは、それが挿入された行ごとのIDの挿入値を返します。サーバーへのラウンドトリップを保存します。

+0

ありがとうございます。正確に私が必要としていたのは、特定の操作に必要なクエリの数を半減させることです。 –

+2

ありがとう! BTW、必要に応じて、複数の値を返すことができます - RETURNING *は、挿入された行全体を返します。 – SamGoody

+0

idフィールドの名前が分からない場合はどうなりますか? – JoeTidee

6

はい、the sequence functionsは、マルチユーザ対応のシーケンスオブジェクトから連続したシーケンス値を取得する方法を提供します。

+1

シーケンスがANSIであることをとてもうれしく思っています - AUTOINCREMENT/IDENTITYはあまりにも制限されています。 –

+0

優秀、ありがとう。 – Jonah

関連する問題