尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
PostgreSQL 内置 UUID 生成:免扩展使用 gen_random_uuid()(v13+)
文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载导读本文讲解如何在 PostgreSQL 中不安装任何扩展就能生成随机的 v4 UUID。自 PostgreSQL v13 起gen_random_uuid()函数已被内置进数据库核心无需再创建uuid-ossp或pgcrypto扩展即可直接调用。读完本文你将掌握gen_random_uuid()的用法、版本前提、与旧方案uuid_generate_v4()、pgcrypto的演进关系以及在建表默认值、ALTER TABLE类型转换等实战场景中的落地方式并了解何时仍必须依赖uuid-ossp扩展。背景PostgreSQL 中 UUID 生成的演进在本仓库的 TIL 系列中先后记录了几种在 PostgreSQL 里生成 UUID 的方式最早的方法是通过uuid-ossp扩展 提供的uuid_generate_v4()函数生成完全基于随机数的 v4 UUID使用前需要先执行create extension uuid-ossp;。后来官方文档指出 OSSP UUID 库“维护不佳、移植难度日益增加”并建议“如果只需要随机生成的版本 4UUID考虑改用 pgcrypto 模块中的gen_random_uuid()函数”即pgcrypto扩展 提供的同名函数使用前同样需要create extension pgcrypto;。两条旧路线都依赖扩展模块涉及扩展的安装与权限管理。而从 PostgreSQL v13 开始情况发生了变化。核心内容v13 起 gen_random_uuid() 成为内置函数从 PostgreSQL v13 开始生成 v4 UUID 不再需要添加任何扩展——gen_random_uuid()函数直接内置在数据库核心中开箱即用。 select gen_random_uuid(); gen_random_uuid -------------------------------------- 0aa72fe6-ede7-4ccf-b328-348becc58066 (1 row)无需任何CREATE EXTENSION前置步骤直接select即可获得一个标准的 v4 UUID。每次调用都会生成全新的随机值例如再次执行会得到截然不同的结果 select gen_random_uuid(); gen_random_uuid -------------------------------------- 8e5f1c7a-2b4d-4a9e-b0c3-1d6f9a2e7b44 (1 row)版本前提确认gen_random_uuid()作为内置函数是 v13 引入的能力。在开发或运维时建议先确认当前集群版本可用本仓库记录的check-postgres-version思路在 Docker 容器中或直接执行版本查询来验证select version();若你的环境仍运行在 PostgreSQL 12 及更早版本gen_random_uuid()不可用此时应退回pgcrypto扩展先create extension pgcrypto;或uuid-ossp扩展 的方案。实战应用把 gen_random_uuid() 用进表结构与迁移内置函数最常见的价值是作为uuid类型列的主键默认值让插入时自动生成随机主键无需应用层传值create table books ( id uuid primary key default gen_random_uuid(), title text not null, author text not null, created_at timestamptz not null default now(), updated_at timestamptz not null default now() );配合本仓库中关于现代主键列设计的思路serial已不推荐整数主键应使用generated always as identityUUID 主键方案可以在建表时与gen_random_uuid()默认值组合使用。gen_random_uuid()也可以出现在ALTER TABLE中。当需要把不可直接转换的列类型如int→uuid改造成 UUID 时PostgreSQL 无法自动完成转换必须借助using子句指定转换逻辑本仓库在switch-non-castable-column-type-with-using-clause中有完整记录alter table users alter column id set data type uuid using (gen_random_uuid());这里的using (gen_random_uuid())告诉 PostgreSQL忽略原来整型id的值改用gen_random_uuid()生成的随机 UUID 填充该列。ORM 侧的使用佐证本仓库的 Rails 笔记也印证了这一内置函数的实际应用columns-with-default-values-are-nil-on-create记录了 Rails 项目中uuid类型列直接以gen_random_uuid()作为数据库层默认值的行为query-a-single-value-from-the-database展示了通过select gen_random_uuid()语句从应用侧直接取一个 UUIDdifferent-ways-to-add-a-foreign-key-reference等迁移笔记展示了type: :uuid的外键引用写法其前提正是主键表使用uuid类型并依赖gen_random_uuid()之类的默认值生成。何时仍需要 uuid-ossp 扩展gen_random_uuid()只解决随机v4UUID的生成。如果你还需要其他非 v4 版本的 UUID 函数比如基于命名空间与名称的确定性 UUID如uuid_generate_v3(namespace, name)、uuid_generate_v5(namespace, name)以及uuid_nil()、uuid_ns_dns()等就仍然得安装并依赖uuid-ossp扩展create extension uuid-ossp; select uuid_generate_v4(); -- v4 随机 UUID select uuid_generate_v5(namespace, name); -- v5 命名空间 UUIDgen_random_uuid() 无法替代仓库中install-postgres-with-uuid-ossp-using-asdf还记录了通过 asdf 安装含uuid-ossp的 PostgreSQL 的注意事项供确有需要时参考。三种方案速查方案是否需要扩展生成类型适用版本uuid_generate_v4()uuid-ossp需要create extension uuid-ossp;v4 随机 UUID且提供 v3/v5 等更多函数所有版本gen_random_uuid()pgcrypto需要create extension pgcrypto;v4 随机 UUIDv12 及更早版本gen_random_uuid()内置不需要任何扩展v4 随机 UUIDv13 及以上选择建议运行在 v13 且只需随机 UUID 时直接使用内置gen_random_uuid()免去扩展安装与权限维护只有需要非 v4 的 UUID 语义时才退回uuid-ossp。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐使用pgrx从Rust生成PostgreSQL扩展SQL使用pgrx从Rust生成PostgreSQL扩展SQL 痛点传统PostgreSQL扩展开发的困境 你还在为PostgreSQL扩展开发中的繁琐SQL生成而数据库后端开发工具Laravel-ACL完全指南为Laravel 6打造轻量级角色权限系统 Laravel ACL完全指南为Laravel 6打造轻量级角色权限系统 你是否正在为Laravel应用寻找一个简单高效的权限管理系统 Larave【免费下载】 DuckDB PostgreSQL扩展pg_duckdb 使用教程DuckDB PostgreSQL扩展pg_duckdb 使用教程 1. 项目介绍 pg_duckdb 是一个为 PostgreSQL 提供的扩展它将 Du创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

微服务常用组件汇总:TaoToken 统一 Key 打通 API 网关与注册中心

微服务常用组件汇总:TaoToken 统一 Key 打通 API 网关与注册中心

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/8 12:12:21
收藏!小白程序员必看:AI Agent = Model + 工程化,从入门到精通大模型实战指南(TaoToken 统一 Key 接入篇)

收藏!小白程序员必看:AI Agent = Model + 工程化,从入门到精通大模型实战指南(TaoToken 统一 Key 接入篇)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/8 12:12:20
拆解端侧大模型实战:小米MiMo-V2.6训练技巧与部署要点

拆解端侧大模型实战:小米MiMo-V2.6训练技巧与部署要点

最近更新发布的这份小米 MiMo-V2.6 技术报告,在端侧大模型圈子里讨论度相当高。很多人看到标题会下意识觉得这只是又一份“自卖自夸”的模型卡,但实际翻完原文会发现,信息密度比预期高很多——尤其是关于训练数据配比、长上下文能力边界、轻量…

📅 2026/10/8 12:07:20
MORE NEWS

更多资讯

📰

K8s Pod状态CrashLoopBackOff重启崩溃

K8s Pod状态CrashLoopBackOff重启崩溃排障实操技术栈:Kubernetes v1.32.13 Rocky Linux 8.6 Containerd 1.7.x操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案K8s Pod状态CrashLoopBackOff重启崩溃排障实操操作环境K8s 集群 3 节点&…

📰

Python pytest装饰器总结(实例详解)

前言 pytest 是第三方测试框架,需要单独安装(pip install pytest),标准库里没有它。它用到的「装饰器」其实分成两类,混在一起讲就很容易乱:pytest.fixture —— 定义夹具(fixture)&…

📰

优效日历深度体验:免费三合一时间管理工具,让日程与待办不再割裂

优效日历:一款免费却足够能打的"日历-日程-待办"三合一工具,我用了三个月后的真实体验如果你和我一样,办公桌上永远贴着三张便利贴、手机里同时躺着三个待办App、Outlook日历里塞满了永远来不及整理的会议提醒——那你大概率也陷入…

📰

Python re模块的使用全过程

前言 很多人用 re 模块只用到一个函数,随手写 re.search(pat, s) 就完事。这在小脚本里没问题,但当模式要反复用、还想带上注释和命名分组时,「编译一次、复用多次」的流程会清晰得多。本文把 re 模块的完整使用链路走一遍:导入、…

📰

普通题材如何拍出共鸣?8分钟微短剧《第二次作业》创作全复盘

如果只给你一个题目,叫“第二次作业”,你会拍什么?这是我接到这个项目时,脑子里冒出的第一个问题。那会儿我们小组刚结束第一个课程短片,所有人都憋着劲想做点不一样的,可拿到“第二次作业”这个主题时反而…

📰

基于TPS259483与ATmega1284的工业电源保护方案设计

做工业控制板这几年,我有一台设备因为传感器供电回路的保护设计跟不上,现场一次接线短路直接烧了一片主控,排查了两天才发现罪魁祸首是电源路径上的保护器件动作太慢。后来我把方案整体换成了以 TPS259483AYWPR 电子保险丝为保护核心、ATmega…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬