Tipossolo PostgreSQL

GEN_RANDOM_UUID

Genera un UUID aleatorio: un identificador único como 3f2c9a1e-….

Sintaxis

GEN_RANDOM_UUID()

Devuelve un UUID de la versión 4: 32 cifras hexadecimales generadas al azar, con guiones. La probabilidad de que dos coincidan es ínfima, así que estas claves pueden crearse en cualquier sitio —en la base de datos o en la aplicación— sin coordinarse. Lo más habitual es usarlas como valor por defecto: id uuid PRIMARY KEY DEFAULT gen_random_uuid().

Datos para los ejemplos

employees

namedepartmentsalarybonusphone
Emmabackend1200300+44 7700 900123
Liambackend1000NULLNULL
Oliviafrontend1350150+44 7700 900456
Noahfrontend950NULL+44 7700 900789
Sophiadesign1200200NULL

Estas tablas ya están creadas en el entorno de pruebas y los ejemplos de abajo las usan. ¿Quieres repetirlo en tu propia base de datos? Copia el SQL.

Un UUID nuevo
SELECT GEN_RANDOM_UUID() AS id;
id
f9b34e8f-3f5a-45cf-b0b1-0c6add1723b7

El resultado cambia cada vez: pulsa «Ejecutar» otra vez.

Cada fila tiene el suyo
SELECT name, GEN_RANDOM_UUID() AS id
FROM employees;
nameid
Emma8163699d-3f38-4465-906f-9694ee1361ef
Liam465e8725-8440-4db0-9447-541a2edbccb4
Olivia6a504341-3ea7-496d-a870-3be957a3864c
Noaha1749abe-3d3c-4cd7-9dac-4a5ea254f914
Sophiac4a4a7e9-c8be-4e1a-b747-239b0ca0262d
Tipo y longitud
SELECT pg_typeof(GEN_RANDOM_UUID()) AS type,
LENGTH(GEN_RANDOM_UUID()::text) AS text_length;
typetext_length
uuid36

Ten en cuenta

Guárdalo como uuid, no como text: como uuid ocupa 16 bytes, y como texto son 36 caracteres y comparaciones más lentas.

Los UUID aleatorios no están ordenados por fecha de creación: ORDER BY id no te da el orden de inserción, y los valores nuevos se dispersan por todo el índice. PostgreSQL 18 tiene uuidv7(), que pone la hora al principio.

Un UUID ocupa 16 bytes frente a los 8 de un bigint. En tablas enormes con muchas relaciones, se nota en el tamaño de los índices.

Funciones relacionadas

Más detalles en el curso