当前位置: 首页 > article >正文

PostgreSQL数据库怎么生成一个随机的UUID

如果需要在pg数据库中生成UUID做表的主键该如何实现,有两种方法:

方法一:使用pgcrypto扩展的pg_random_uuid()函数

要在PostgreSQL中使用pg_random_uuid()函数,你需要首先确保pgcrypto扩展已经被安装在你的数据库中,并且对于你想要使用它的数据库(或schema)已经启用了这个扩展。以下是如何启用pgcrypto扩展的步骤:

  1. 登录到PostgreSQL数据库:使用psql命令行工具或你喜欢的数据库管理工具登录到你的PostgreSQL数据库。

  2. 启用pgcrypto扩展:在psql命令行中,你可以通过以下SQL命令为你的当前数据库启用pgcrypto扩展:

    CREATE EXTENSION IF NOT EXISTS pgcrypto;

    这条命令会检查pgcrypto扩展是否已经存在,如果不存在,则创建并启用它。IF NOT EXISTS是可选的,但如果你不确定是否已经启用了扩展,加上它会更安全。

  3. 使用pg_random_uuid()函数:一旦pgcrypto扩展被启用,你就可以在你的SQL查询或PL/pgSQL函数中使用pg_random_uuid()函数来生成随机UUID了。

    例如,在psql命令行中,你可以直接执行返回一个新的随机UUID;

    SELECT pg_random_uuid();

方法二:定义一个存过函数

CREATE OR REPLACE FUNCTION public.gen_random_uuid()
 RETURNS uuid
 LANGUAGE c
 PARALLEL SAFE
AS '$libdir/pgcrypto', $function$pg_random_uuid$function$;

这条SQL语句是在PostgreSQL数据库中定义或替换一个名为gen_random_uuid的函数。这个函数的作用是生成一个随机的UUID(Universally Unique Identifier,通用唯一识别码)。下面是对这个语句各部分的详细解释:

  1. CREATE OR REPLACE FUNCTION public.gen_random_uuid():
    • CREATE OR REPLACE FUNCTION: 这部分指示PostgreSQL要么创建一个新的函数(如果该函数名不存在),要么替换掉已存在的同名函数。这非常有用,因为它允许你在不删除旧函数的情况下更新函数的定义。
    • public.gen_random_uuid(): 指定了函数的名称(gen_random_uuid)和它的模式(public),以及它不接受任何参数(括号内为空)。public是PostgreSQL中的一个默认模式,用于存放数据库对象,如表格、视图、函数等,除非特别指定其他模式。
  2. RETURNS uuid:
    • 这部分指明了函数的返回类型,即这个函数将返回一个uuid类型的值。UUID是一个128位的数字,通常用32个十六进制数字表示,分成5组由连字符分隔(例如:123e4567-e89b-12d3-a456-426614174000),用于保证全球范围内的唯一性。
  3. LANGUAGE c:
    • 这表示函数是用C语言编写的。实际上,在这个特定的例子中,虽然指定了LANGUAGE c,但函数体实际上是通过pgcrypto模块中的pg_random_uuid函数实现的,这是一个用C编写的扩展,用于生成随机UUID。
  4. PARALLEL SAFE:
    • 这指定了函数的并行执行安全性。PARALLEL SAFE意味着这个函数可以安全地在并行查询中被调用,即它的执行不会依赖于或修改其他并行查询可能访问的数据。这对于确保数据库查询的并行执行性能很重要。
  5. AS '$libdir/pgcrypto', $function$pg_random_uuid$function$:
    • 这是函数体的定义部分,但它实际上并没有包含C代码。相反,它指定了函数应该通过调用pgcrypto扩展中的pg_random_uuid函数来实现。$libdir/pgcrypto指定了pgcrypto扩展库的路径($libdir是一个占位符,代表PostgreSQL的库目录),而$function$pg_random_uuid$function$则是被调用的具体函数名。这种写法是PostgreSQL中调用扩展函数的一种特殊方式。

综上所述,这条语句定义了一个名为gen_random_uuid的函数,它使用pgcrypto扩展的pg_random_uuid函数来生成一个随机的UUID,并将这个UUID作为函数的返回值。这个函数可以被并行安全地调用。

在psql命令行中,你可以直接执行如下SQL返回一个新的随机UUID;

select lower(replace(gen_random_uuid()::text,'-',''));


http://www.kler.cn/a/314020.html

相关文章:

  • WordPress 6.7 “Rollins”发布
  • redis bind 127.0.0.1和bind 10.34.56.78的区别
  • 数字孪生在智慧能源项目中的关键作用,你了解多少?
  • 虚幻引擎 CEO 谈元宇宙:发展、策略与布局
  • 提取神经网络数学表达式
  • MybatisPlus入门(十)MybatisPlus-逻辑删除和多记录操作
  • K8S介绍+集群部署
  • Django视图:构建动态Web页面的核心技术
  • 伊犁职业技术学院linux 部署教学用首先创建两台linux 主机
  • springboot实战学习笔记(2)
  • MyBatis框架SqlSession浅析
  • Elastic 的 OpenTelemetry PHP 发行版简介
  • RealityCapture1.4设置缓存和设置重置
  • Python 二级考试
  • 2409js,学习js2
  • Th:1.1 建立连接
  • 6-3 Java异常处理
  • JVM运行区域介绍
  • 进程间通信的七种方法实战演示!值得收藏!
  • Matlab求解微分方程(解析解与数值解)
  • 利士策分享,华为三折叠手机:重塑未来科技生活的里程碑
  • 【高等代数笔记】线性空间(五-九)
  • module ‘urllib.request‘ has no attribute ‘urlencode‘ 问题解决
  • LeetCode2414题: 最长的字母序连续子字符串的长度(原创)
  • 【数据结构-差分】力扣1589. 所有排列中的最大和
  • 十三、SOA(企业服务总线ESB架构实现)