PostgreSQL 8.1 になって、
MySQL における LAST_INSERT_ID() に似た機能をもつ、LastVal() がサポートされるようになりました。
MySQL:
CREATE TABLE employee (
id int unsigned auto_increment not null primary key,
name varchar(128) not null
);
INSERT INTO employee (name) VALUES (‘John’);
SELECT LAST_INSERT_ID();
と、次のものは全く同等の意味になります。
PostgreSQL:
CREATE TABLE employee (
id serial not null primary key,
name varchar(128) not null
);
INSERT INTO employee (name) VALUES (‘John’);
SELECT LASTVAL();
LASTVAL() はシーケンスのインクリメント関数である NEXTVAL() が一番最後に返した値を返すものです。
PostgreSQL の LASTVAL() は MySQL の LAST_INSERT_ID() と同様に、
他のセッションでの NEXTVAL()の影響は受けません。
一度も自分のセッションで NEXTVAL() を呼び出していない場合は、”ERROR: lastval is not yet defined in this session”というエラーが発生します。
参考:
PostgreSQL を MySQL 互換にする(Open Tech Press)
シーケンス操作関数(PostgreSQL 8.1.0 日本語ドキュメント)