Answers:
呼叫DEFAULT
定义列调用的一个时OSSP UUID功能。每次插入行时,Postgres服务器都会自动调用该函数。
CREATE TABLE tbl
(
pkey UUID NOT NULL DEFAULT uuid_generate_v1() ,
CONSTRAINT pkey_tbl PRIMARY KEY ( pkey )
)
尽管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";
请参阅扩展文档,以查看提供的用于生成各种UUID值的多个命令的列表。要获取从计算机的MAC地址加上当前日期时间加上一个小的随机值构建的UUID的原始版本,请致电uuid_generate_v1()
。
SELECT uuid_generate_v1();
672124b6-9894-11e5-be38-001d42e813fe
此主题的后续变体是为其他种类的UUID开发的。例如,出于安全性或隐私方面的考虑,某些人可能不想记录服务器的实际MAC地址。Postgres扩展生成五种UUID,以及“ nil” UUID 00000000-0000-0000-0000-000000000000
。
可以自动进行该方法调用,以为任何新插入的行生成默认值。定义列时,请指定:
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_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版本?
如果您对版本3和5感到好奇,请参阅此问题,生成v5 UUID。什么是名称和名称空间?。
有关更多讨论,请参见我对类似问题的解答和我的博客文章,从JDBC到Postgres的UUID值。
getObject()
也可以使用UUID id = rs.getObject("uuid_", UUID.class);
只是罗勒(Basil)非常详细的答案的一小部分:
由于目前大多数正在使用pgcrypto,而不是uuid_generate_v1()
你可以使用gen_random_uuid()
一个版本4的UUID值。
首先,在您的Postgres中启用pgcrypto。
CREATE EXTENSION "pgcrypto";
只需将列的DEFAULT设置为
DEFAULT gen_random_uuid()