Bas*_*que 135
呼叫DEFAULT定义列调用之一,当OSSP的uuid功能。每次插入一行时,Postgres 服务器都会自动调用该函数。
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Run Code Online (Sandbox Code Playgroud)
如果您已经使用pgcrypto扩展,请考虑bpieck的答案。
虽然Postgres开箱即用支持以原生128 位形式存储 UUID(通用唯一标识符)值,但生成UUID 值需要插件。在 Postgres 中,插件被称为.extension
要安装扩展程序,请调用CREATE EXTENSION。为避免重新安装,请添加IF NOT EXISTS. 有关更多详细信息,请参阅我的博客文章,或在 StackOverflow 中查看此页面。
我们想要的扩展是一个用 C 语言构建的开源库,用于处理 UUID,OSSP uuid。甲此库的Postgres生成通常与的Postgres的安装捆绑诸如提供的图形安装由企业DB或包括在由云提供商如亚马逊RDS对PostgreSQL。
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
Run Code Online (Sandbox Code Playgroud)
请参阅扩展的文档以查看用于生成各种 UUID 值的多个命令的列表。要从计算机的MAC 地址加上当前日期时间加上一个小的随机值来获取原始版本的 UUID ,请调用uuid_generate_v1().
SELECT uuid_generate_v1();
Run Code Online (Sandbox Code Playgroud)
672124b6-9894-11e5-be38-001d42e813fe
此主题的后续变体是为替代类型的 UUID 开发的。有些人可能不想记录服务器的实际 MAC 地址,例如出于安全或隐私考虑。Postgres 扩展生成五种 UUID,加上“nil”UUID 00000000-0000-0000-0000-000000000000。
该方法调用可以自动为任何新插入的行生成默认值。定义列时,指定:
DEFAULT uuid_generate_v1()
请参阅以下示例表定义中使用的命令。
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
Run Code Online (Sandbox Code Playgroud)
uuid_generate_v1()uuid_generate_v1mc()uuid_generate_v3( namespace uuid, name text )uuid_generate_v4()uuid_generate_v5( namespace uuid, name text )uuid_nil()00000000-0000-0000-0000-000000000000。用作未知 UUID 值的标志。称为nil UUID。要比较类型,请参阅问题,要使用哪个 UUID 版本?
如果您只对版本 4(随机生成)感兴趣,并且已经在使用pgcrypto,请参阅bpieck的答案。
如果您对版本 3 和 5 感到好奇,请参阅此问题,生成 v5 UUID。什么是名称和命名空间?.
有关更多讨论,请参阅我对类似问题的回答和我的博客文章UUID 值从 JDBC 到 Postgres。
小智 18
只是罗勒非常详细的答案的一小部分。
由于目前大多数都在使用pgcrypto,因此uuid_generate_v4()您可以将其gen_random_uuid()用于版本 4 UUID值。
首先,在你的 Postgres 中启用pgcrypto。
CREATE EXTENSION "pgcrypto";
Run Code Online (Sandbox Code Playgroud)
只需将列的 DEFAULT 设置为
DEFAULT gen_random_uuid()
Run Code Online (Sandbox Code Playgroud)
Luk*_*sis 11
如果使用 Postgres 13 或更高版本,您不需要任何修改或额外的插件,只需使用gen_random_uuid()
刚刚在默认的 AWS Aurora Serverless v2 和 Postgres v14 上进行了测试
ps你可以看到我的默认id实际上是带有前缀的,wor-而它是工作区id。我向所有表添加前缀,这样当我从任何地方(日志、支持等)获取 ID 时,我就可以准确地知道要搜索的内容。
concat('wor-', gen_random_uuid())
| 归档时间: |
|
| 查看次数: |
145507 次 |
| 最近记录: |