You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 14:22:04