微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – Postgres中UUID列的默认值

Postgres 9.x中,对于类型为 UUID的列,如何指定要自动生成的UUID作为任何行插入的认值?
生成UUID所需的插件

虽然Postgres开箱即用支持在其本机128-bit表单中存储UUID (Universally Unique Identifier)值,但生成UUID值需要插件.在Postgres中,插件称为扩展.

要安装扩展,请致电CREATE EXTENSION.要避免重新安装,请添加IF NOT EXISTS.有关详细信息,请参阅my blog post,或参见this page in StackOverflow.

我们想要的扩展是一个用C语言构建的开源库,用于处理UUID,OSSP uuid.build of this library for Postgres经常捆绑Postgres的安装,例如Enterprise DBEnterprise DB,或者包括在云提供商(如Amazon RDS for PostgreSQL)中.

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

生成各种UUID

请参阅extension’s doc以查看为生成各种UUID值而提供的多个命令的列表.要获取从计算机的MAC address加上当前日期时间加上一个随机值构建的UUID的原始版本,请致电uuid_generate_v1().

SELECT uuid_generate_v1();

672124b6-9894-11e5-be38-001d42e813fe

后来对这个主题的变化是为其他类型的UUID开发的.有些人可能不想记录服务器的实际MAC地址,例如,出于安全或隐私问题. Postgres扩展生成五种UUID,加上“nil”UUID 00000000-0000-0000-0000-000000000000.

UUID作为认值

可以自动进行该方法调用,以便为任何新插入的行生成认值.定义列时,请指定:

DEFAULT uuid_generate_v1()

请参阅以下示例表定义中使用的命令.

CREATE TABLE public.pet_
(
  species_ text NOT NULL,name_ text NOT NULL,date_of_birth_ text NOT NULL,uuid_ uuid NOT NULL DEFAULT uuid_generate_v1(),-- <====
  CONSTRAINT pet_pkey_ PRIMARY KEY (uuid_)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE public.pet_
  OWNER TO postgres;

UUID版本

uuid-ossp插件可以生成various versions of UUID.

> uuid_generate_v1()包含当前计算机当前时刻的MAC address.常用,但如果您对披露数据库服务器的MAC或生成此值的时间敏感,请避免使用.由规范定义为Version 1 UUID.
> uuid_generate_v1mc()与Version 1类似,但使用随机多播MAC地址而不是实际MAC地址.显然是一种使用版本1的方法,但如果您对披露这一事实很敏感,则替换另一个MAC而不是数据库服务器的实际MAC.什么是“随机多播MAC”? I do not know exactly.在阅读RFC 4122的第4.1.6节之后,我怀疑这是一个代替MAC的随机数,但是比特设置为指示多播MAC地址而不是通常的单播,以便将版本1的这种变化与通常的实际MAC版本1 UUID.
> uuid_generate_v3(名称空间uuid,名称文本)包含您提供的MD5 hash文本.由规范定义为基于Version 3 UUID,namespace的UUID.
> uuid_generate_v4()基于随机生成的128位121-122的数据.六或七个bits用于表示版本和版本.变种.仅当使用cryptographically-strong random generator实现时,此类UUID才是实用的.由规范定义为Version 4 UUID.
> uuid_generate_v5(名称空间uuid,名称文本)与版本3相同,但使用SHA1散列.由规范定义为Version 5 UUID.
> uuid_nil()一种特殊情况,所有位都设置为零00000000-0000-0000-0000-000000000000.用作未知UUID值的标志.被称为nil UUID.

要比较类型,请参阅问题,Which UUID version to use?

如果您对第3版和第3版感到好奇5,见本课题,Generating v5 UUID. What is name and namespace?.

有关更多讨论,请参阅my Answer至类似问题和我的博客文章UUID values from JDBC to Postgres.

原文地址:https://www.jb51.cc/postgresql/192423.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐