我想插入一个用户并获取其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?
答案 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')
检索上一个生成的数字。