Saltar al contenido principal
PostgreSQL
20 min de lectura

UUID

Identificadores únicos universales en PostgreSQL

UUID (Universally Unique Identifier) genera identificadores únicos a nivel global.

Generar UUIDs

sql
1-- Habilitar extensión2CREATE EXTENSION IF NOT EXISTS "uuid-ossp";3 4-- Generar UUID v45SELECT uuid_generate_v4();6-- Resultado: 550e8400-e29b-41d4-a716-4466554400007 8-- Usar UUID como PK9CREATE TABLE usuarios (10    id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,11    nombre TEXT NOT NULL,12    email TEXT UNIQUE NOT NULL13);

Ventajas

  • Únicos globalmente (no requieren secuencia central)
  • Seguros (no revelan información como IDs secuenciales)
  • Compatibles con sistemas distribuidos
  • Se pueden generar en el cliente
  • Consideraciones

  • Ocupan más espacio que INT (16 bytes vs 4 bytes)
  • Índices B-tree en UUID pueden ser menos eficientes
  • Alternativa: ULID o Snowflake IDs
  • Sintaxis

    Sintaxis
    sql
    1CREATE EXTENSION "uuid-ossp";2SELECT uuid_generate_v4();

    Ejemplos

    Tabla con UUID

    Usar UUID como identificador principal

    Ejemplo
    sql
    1CREATE EXTENSION IF NOT EXISTS "uuid-ossp";2 3CREATE TABLE pedidos (4    id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,5    usuario_id UUID REFERENCES usuarios(id),6    total DECIMAL NOT NULL,7    creado_en TIMESTAMP DEFAULT NOW()8);9 10INSERT INTO pedidos (usuario_id, total) VALUES11    ('550e8400-e29b-41d4-a716-446655440000', 150.00)12RETURNING *;

    Resultado:

    | id                                   | usuario_id                           | total  | creado_en               |
    |--------------------------------------|--------------------------------------|--------|-------------------------|
    | 6ba7b810-9dad-11d1-80b4-00c04fd430c8 | 550e8400-e29b-41d4-a716-446655440000 | 150.00 | 2024-01-15 10:30:00     |