2

我想插入一个用户并获取它的 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?

4

2 回答 2

4

使用返回

CREATE OR REPLACE FUNCTION create_user(registration_ip inet)
  RETURNS integer AS
INSERT INTO users(registration_ip)
   VALUES($1) RETURNING id;
LANGUAGE sql VOLATILE;
于 2012-04-04T08:06:19.257 回答
1

不,这不安全(而且速度非常慢!)

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

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

于 2012-04-04T08:03:44.340 回答