PostgreSQL中如何获取最后插入的UUID?
如何获取PostgreSQL中默认生成的UUID值
你遇到的问题根源在于:LASTVAL() 仅能获取由序列对象(比如 SERIAL/IDENTITY 列依赖的序列)生成的自增ID,而 gen_random_uuid() 是直接生成随机UUID,并未关联任何序列,因此无法用 LASTVAL() 或 CURRVAL() 获取其值。
获取插入的UUID有以下几种实用方法:
插入时直接返回UUID(推荐)
使用RETURNING子句,插入操作执行后会直接返回生成的UUID,支持单行或多行插入场景:INSERT INTO t (title) VALUES ('hello'), ('world') RETURNING id;执行后会输出所有插入行的UUID值。如果是在PL/pgSQL脚本中,可以将返回值存入变量:
DECLARE inserted_uuids UUID[]; BEGIN INSERT INTO t (title) VALUES ('hello'), ('world') RETURNING id INTO inserted_uuids; -- 后续可通过inserted_uuids变量访问插入的UUID END;改用序列关联的UUID生成方式(不推荐,仅作补充)
如果你一定要用类似LASTVAL()的方式获取,可以预先创建序列,用序列值生成UUID(比如基于序列的v1 UUID),但这种方式会失去UUID的随机性,一般不推荐:-- 先启用uuid-ossp扩展(若未启用) CREATE EXTENSION IF NOT EXISTS uuid_ossp; -- 创建序列 CREATE SEQUENCE t_id_seq; -- 修改表用序列生成UUID ALTER TABLE t ALTER COLUMN id SET DEFAULT uuid_generate_v1mc(nextval('t_id_seq')); -- 插入后即可用LASTVAL()获取序列值,再转换为UUID INSERT INTO t (title) VALUES ('test'); SELECT uuid_generate_v1mc(lastval());
内容的提问来源于stack exchange,提问作者gcb
相关产品推荐
相关产品推荐

