UUID 数据类型

存储通用唯一标识符 (UUID)。UUID 是用于唯一标识记录的 16 字节(128 位)数字。为了生成 UUID,Vertica 提供了函数 UUID_GENERATE,该函数根据高质量随机性从 /dev/urandom 返回 UUID。

语法

UUID

UUID 输入和输出格式

UUID 支持输入不区分大小写的字符串字面量格式,如 RFC 4122 所指定。通常,UUID 被写为十六进制数字序列,在可选地由连字符分隔的几个组中,总共 32 个数字代表 128 位。

以下输入格式有效:

6bbf0744-74b4-46b9-bb05-53905d4538e7
{6bbf0744-74b4-46b9-bb05-53905d4538e7}
6BBF074474B446B9BB0553905D4538E7
6BBf-0744-74B4-46B9-BB05-5390-5D45-38E7

在输出时,Vertica 始终使用以下格式:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

例如,下表将列 cust_id 定义为 UUID:

=> CREATE TABLE public.Customers
(
    cust_id uuid,
    lname varchar(36),
    fname varchar(24)
);

cust_id 的以下输入使用了几种有效格式:

=>  COPY Customers FROM STDIN;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> {cede66b7-3d29-4da6-b700-871fc0ac57be}|Kearney|Thomas
>> 34462732ed5649838f3be735b0c32d50|Pham|Duc
>> 9fb0-1de0-1d63-4d09-9415-90e0-b4e9-3b9a|Steinberg|Jeremy
>> \.

在查询此表时,Vertica 以相同的方式格式化所有 cust_id 数据:

=> SELECT cust_id, fname, lname FROM Customers;
                cust_id                | fname  |   lname
--------------------------------------+--------+-----------
 9fb01de0-1d63-4d09-9415-90e0b4e93b9a | Jeremy | Steinberg
 34462732-ed56-4983-8f3b-e735b0c32d50 | Duc    | Pham
 cede66b7-3d29-4da6-b700-871fc0ac57be | Thomas | Kearney
(3 rows)

生成 UUID

您可以使用 Vertica 函数 UUID_GENERATE 自动生成唯一标识表记录的 UUID。例如:

=> INSERT INTO Customers SELECT UUID_GENERATE(),'Rostova','Natasha';
 OUTPUT
--------
      1
(1 row)

=> COMMIT;
COMMIT
=> SELECT cust_id, fname, lname FROM Customers;
               cust_id                |  fname  |   lname
--------------------------------------+---------+-----------
 9fb01de0-1d63-4d09-9415-90e0b4e93b9a | Jeremy  | Steinberg
 34462732-ed56-4983-8f3b-e735b0c32d50 | Duc     | Pham
 cede66b7-3d29-4da6-b700-871fc0ac57be | Thomas  | Kearney
 9aad6757-fe1b-473a-a109-b89b7b358c69 | Natasha | Rostova
(4 rows)

NULL 输入和输出

以下字符串为 UUID 列保留为 NULL:

00000000-0000-0000-0000-000000000000

Vertica 始终将 NULL 呈现为空白。

以下 COPY 语句将 NULL 值显式和隐式插入到 UUID 列中:

=>  COPY Customers FROM STDIN NULL AS 'null';
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> null|Doe|Jane
>> 00000000-0000-0000-0000-000000000000|Man|Nowhere
>> \.
=>  COPY Customers FROM STDIN;
>> |Doe|John
>> \.

在所有情况下,Vertica 都将 NULL 呈现为空白:

=> SELECT cust_id, fname, lname FROM Customers WHERE cust_id IS NULL;
 cust_id |  fname  | lname
---------+---------+-------
         | Nowhere | Man
         | Jane    | Doe
         | John    | Doe
(3 rows)

使用限制

UUID 数据类型仅支持也受 CHAR 和 VARCHAR 数据类型支持的关系运算符和函数,例如 MINMAXCOUNT。UUID 数据类型不支持数学运算符或函数,例如 SUMAVG