postgresql – Postgres中UUID列的默认值

前端之家收集整理的这篇文章主要介绍了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,@L_502_8@.build of this library for Postgres经常捆绑Postgres的安装,例如Enterprise DBEnterprise DB,或者包括在云提供商(如Amazon RDS for PostgreSQL)中.

  1. CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

生成各种UUID

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

  1. 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()

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

  1. CREATE TABLE public.pet_
  2. (
  3. species_ text NOT NULL,name_ text NOT NULL,date_of_birth_ text NOT NULL,uuid_ uuid NOT NULL DEFAULT uuid_generate_v1(),-- <====
  4. CONSTRAINT pet_pkey_ PRIMARY KEY (uuid_)
  5. )
  6. WITH (
  7. OIDS=FALSE
  8. );
  9. ALTER TABLE public.pet_
  10. 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.

猜你在找的Postgre SQL相关文章