postgresql最后插入id并发

时间:2012-04-04 07:59:26

标签: sql postgresql

我想插入一个用户并获取其ID,例如最后插入ID。通过sql。

CREATE OR REPLACE FUNCTION create_user(registration_ip inet)
  RETURNS integer AS
insert into users(registration_ip)
   values($1);
select max(id) from users;
LANGUAGE sql VOLATILE

这个功能安全吗?我的意思是并发安全吗?例如n同时创建用户是否保证它将返回当前用户的id?

2 个答案:

答案 0 :(得分:4)

使用RETURNING

CREATE OR REPLACE FUNCTION create_user(registration_ip inet)
  RETURNS integer AS
INSERT INTO users(registration_ip)
   VALUES($1) RETURNING id;
LANGUAGE sql VOLATILE;

答案 1 :(得分:1)

不,它安全(而且非常慢!)

您应该为此目的使用序列。

如果id列定义为serial,则会自动为您创建一个序列,您可以使用currval('users_id_seq')检索上一个生成的数字。