La extensión uuid-ossp proporciona funciones para generar identificadores únicos universales (UUID). En sistemas distribuidos, los UUID ofrecen garantías de unicidad más sólidas que las secuencias, por lo que son una opción confiable para claves primarias e identificadores de registros entre nodos.
Formato de UUID
Un UUID consta de 32 dígitos hexadecimales organizados en cinco grupos separados por guiones: 8-4-4-4-12. Por ejemplo:
a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
PostgreSQL acepta UUID en varios formatos equivalentes:
|
Format |
Example |
|
Estándar (minúsculas) |
|
|
Mayúsculas |
|
|
Llaves |
|
|
Sin guiones |
|
|
Guiones cada 4 dígitos |
|
|
Mixto |
|
Los campos UUID no se pueden utilizar como clave de distribución en AnalyticDB for PostgreSQL.
Instalar la extensión
Antes de generar UUID, instale la extensión uuid-ossp desde la página Extensions de su instancia. Para obtener más detalles, consulte Install, update, and uninstall extensions.
Funciones de generación de UUID
Versión 1: basada en tiempo
uuid_generate_v1() genera un UUID a partir de la marca de tiempo actual y la dirección MAC del host.
uuid_generate_v1mc() funciona igual que uuid_generate_v1(), pero utiliza una dirección MAC de multidifusión aleatoria en lugar de la dirección MAC real, lo que evita la exposición directa del identificador de hardware de la máquina.
Los UUID de versión 1 integran la dirección MAC de la máquina generadora e incluyen un componente de tiempo, lo que los hace parcialmente predecibles. Evite usar UUID de versión 1 en aplicaciones sensibles a la seguridad.
Versión 3: basada en nombre (MD5)
uuid_generate_v3(namespace uuid, name text) genera un UUID determinista mediante el hash de name dentro de namespace con MD5.
namespace: constante devuelta por una de las funcionesuuid_ns_*()(consulte Constantes de namespaceNamespace constants).name: identificador dentro del namespace.
SELECT uuid_generate_v3(uuid_ns_url(), 'example.com');
Las mismas entradas siempre producen el mismo UUID. No interviene ningún algoritmo aleatorio ni entorno del sistema, por lo que el resultado es totalmente reproducible.
Versión 4: aleatoria
uuid_generate_v4() genera un UUID basado en números aleatorios.
Versión 5: basada en nombre (SHA-1)
uuid_generate_v5(namespace uuid, name text) funciona igual que uuid_generate_v3(), pero usa SHA-1 en lugar de MD5. Dado que SHA-1 es más seguro que MD5, prefiera la versión 5 sobre la versión 3 siempre que necesite UUID basados en nombre.
Constantes de namespace
Utilice estas constantes como argumento de namespace en uuid_generate_v3() y uuid_generate_v5().
|
Function |
Namespace |
|
|
Domain Name System (DNS) |
|
|
URL |
|
|
Identificador de objeto ISO (OID), definido por el estándar Abstract Syntax Notation One (ASN.1); distinto de los OID de PostgreSQL |
|
|
Nombre distinguido X.500 (DN) |
uuid_nil() devuelve la constante de UUID nulo, que no es un UUID real.
Ejemplos
-- Version 1 (time-based)
SELECT uuid_generate_v1();
uuid_generate_v1
--------------------------------------
c7f83ba4-bd93-11e9-8674-40a8f01ec4e8
(1 row)
-- Version 3 (name-based, MD5)
SELECT uuid_generate_v3(uuid_ns_url(), 'example.com');
uuid_generate_v3
--------------------------------------
a0473a67-27a1-3c05-a2d1-5c134639347f
(1 row)
-- Version 4 (random)
SELECT uuid_generate_v4();
uuid_generate_v4
--------------------------------------
d7a8d47e-58e3-4bd9-9340-8553ac03d144
(1 row)
-- Version 5 (name-based, SHA-1)
SELECT uuid_generate_v5(uuid_ns_url(), 'example.com');
uuid_generate_v5
--------------------------------------
a5cf6e8e-4cfa-5f31-a804-6de6d1245e26
(1 row)