讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在PostgreSQL中使用GEN_RANDOM_UUID生成唯一主键

雨强姑娘_6467

雨强姑娘_6467

发布时间:2026-09-25 06:53:37

|

590人浏览过

|

来源于php中文网

原创

PostgreSQL 13+才内置gen_random_uuid()函数,低版本需启用uuid-ossp扩展用uuid_generate_v4();v13+仍需CREATE EXTENSION IF NOT EXISTS "pgcrypto"确保可用;建表主键应设DEFAULT gen_random_uuid(),避免TEXT存储和重复调用导致冲突。

如何在postgresql中使用gen_random_uuid生成唯一主键

PostgreSQL 13+ 才能直接用 gen_random_uuid(),低于这个版本会报错“function gen_random_uuid() does not exist”

确认 PostgreSQL 版本是否支持 gen_random_uuid()

该函数是 PostgreSQL v13 内置的,不依赖扩展。低于 v13(比如 v12 或更早)即使装了 pgcrypto 也不存在这个函数。

  • 检查版本:SELECT version(); —— 输出含 13. 或更高即支持
  • v12 及以下必须改用 uuid_generate_v4()(需先启用 "uuid-ossp" 扩展)或手动安装 pgcrypto 后用其他方式生成随机字节再转 UUID
  • 别在跨版本迁移脚本里硬写 gen_random_uuid(),否则在旧库执行直接失败

启用 pgcrypto 扩展(v13+ 可跳过,但建表前仍建议确认)

gen_random_uuid() 依赖 pgcrypto 扩展提供底层随机数能力,虽然 v13+ 默认内置该函数,但某些精简版或容器镜像可能未加载扩展。

Random Test
Random Test

讲编程笑话,点亮你的心情。

下载
  • 执行:CREATE EXTENSION IF NOT EXISTS "pgcrypto";
  • 注意双引号——pgcrypto 是标识符名,不是字符串,不加引号在部分配置下会报错
  • 该命令需在目标数据库中单独运行,不是一次启用就全局生效;每个新数据库都要单独执行
  • 如果提示 permission denied,说明当前用户无 CREATEDB 或 EXTENSION 权限,得找 DBA 授权

建表时设 DEFAULT gen_random_uuid() 作为主键

这是最常用、最安全的方式,插入时不传 id 字段即可自动生成。

  • 正确写法:id UUID PRIMARY KEY DEFAULT gen_random_uuid()
  • 不要写成 id UUID DEFAULT gen_random_uuid() PRIMARY KEY —— 语法虽通,但部分 ORM 或迁移工具解析异常
  • 避免用 TEXT 或 VARCHAR(36) 存 UUID:浪费空间、无法利用 uuid 类型的索引优化和校验
  • 别在 INSERT ... SELECT 中对同一行多次调用 gen_random_uuid(),它每次返回值都不同,可能导致主键冲突或逻辑错乱

插入数据时显式调用 gen_random_uuid() 的注意事项

适用于需要预生成 ID、或与其它字段联动构造场景(如分片键),但要小心并发和重复。

  • 单条插入可写:INSERT INTO users (id, name) VALUES (gen_random_uuid(), 'alice');
  • 批量插入慎用:INSERT INTO users (id, name) SELECT gen_random_uuid(), name FROM temp_names; —— 每行都会独立生成,没问题;但若 temp_names 有重复 name 且业务依赖 id 顺序,则 UUID 无序性会影响后续处理
  • 它不保证全局单调递增,也不能用于时间排序;如需“最近注册用户”,应额外维护 created_at 字段
  • 高并发下极少出现碰撞(理论概率约 10⁻³⁶),但若应用层做了重试逻辑,需确保重试时重新调用 gen_random_uuid(),而不是复用上次生成的值

真正容易被忽略的是:v13+ 虽内置函数,但很多生产环境仍在用 v12 或定制编译版,上线前务必在目标实例上实测 SELECT gen_random_uuid(); 是否返回合法 UUID 值,而不是只查文档或本地开发库版本。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

213

2023.10.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4129

2023.11.02

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。更详细的postgresql常用命令,大家可以访问下面的文章。

607

2023.11.16

postgresql常用命令介绍
postgresql常用命令介绍

postgresql常用命令有l、d、d5、di、ds、dv、df、dn、db、dg、dp、c、pset、show search_path、ALTER TABLE、INSERT INTO、UPDATE、DELETE FROM、SELECT等。想了解更多postgresql的相关内容,可以阅读本专题下面的文章。

1356

2023.11.20

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

440

2026.02.12

PostgreSQL 性能优化与查询执行计划实战
PostgreSQL 性能优化与查询执行计划实战

本专题深入解析PostgreSQL性能优化核心,聚焦查询执行计划的实战应用。通过EXPLAIN命令精准定位瓶颈,结合索引策略、SQL改写与参数调优,系统提升查询效率。从执行计划解读到性能调优全流程,助你掌握数据库性能诊断与优化实战能力。

130

2026.05.08

PostgreSQL 在 Next.js / Go 全栈架构中的工程化实践
PostgreSQL 在 Next.js / Go 全栈架构中的工程化实践

本文详解如何利用Next.js(搭配Drizzle ORM)与Go后端构建高性能应用,充分发挥PG在JSONB非结构化存储与pgvector向量检索上的优势。从数据建模到Docker容器化部署,打造支持AI时代的“One Database”工程化解决方案。

881

2026.05.08

PostgreSQL高级特性、内核机制与现代数据架构
PostgreSQL高级特性、内核机制与现代数据架构

本专题从MVCC并发控制与WAL日志等内核机制出发,详解JSONB、PostGIS及pgvector等高级特性。探讨如何利用单一引擎支撑关系型、向量及图数据等现代数据架构需求,助您掌握构建高并发、智能化应用的核心技术。

224

2026.05.08

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

60

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn