Uso de la funcion gen_random_uuid() nativa de Postgresql en Supabase + Prismajs

Hace un par de semanas me encontré con la sorpresa de trabajar con la función gen_random_uuid nativa de PostgreSQL en supabase y con el ORM prisma, que expone la extensión pgcrypto, aquí una breve explicación de cómo usar esta función para generar el UUID de versión 4.

wootsbot
wootsbot / junio 6, 2022
2 min de lectura––– vistas
Picture of Uso de la funcion gen_random_uuid() nativa de Postgresql en Supabase + Prismajs

PostgreSQL incluye una función para generar un UUID, la exponen con el nombre gen_random_uuid() → uuid. Esta función devuelve un UUID de versión 4 (aleatorio). Este es el tipo de UUID más utilizado y es apropiado para la mayoría de las aplicaciones y lo haremos con la ayuda de Supabase + Prismajs.

Algunas funciones de bases de datos nativas son parte de una extensión. Por ejemplo, gen_random_uuid() es parte del módulo pgcrypto. El módulo pgcrypto proporciona funciones criptográficas para PostgreSQL.

Creando modelo User

En el schema.prisma voy a crear el modelo User con los siguientes atributos, la propiedad @default(uuid()) nos genera un identificador único global basado en la especificación UUID. Este es un ejemplo que puedes encontrar en la documentacion de prisma

model User {
  id          String   @id @default(uuid())
  name        String
  userName    String   @map("user_name")
}

Pero queremos hacer uso de la función gen_random_uuid() de PostgreSQL, Así que los cambios que tenemos que hacer son los siguientes.

  model User {
-    id    String   @id @default(uuid())
+    id    String   @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid

dbgenerated Representa valores predeterminados que no se pueden expresar en el esquema de Prisma (como random()).

entonces nuestro modelo final sería el siguiente.

model User {
  id          String   @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
  name        String
  userName    String   @map("user_name")
}

Veremos que en el dashboard de supabase al crear un nuevo usuario en la columna id veremos po defecto gen_random_uuid().

prisma

Conclusión

En PostgreSQL, existen varias alternativas a los campos de ID, cada una de las cuales tiene un caso de uso adecuado para usar o no, con gen_random_uuid lo que le devolverán son incuestionablemente únicos, lo que garantiza que reciba datos precisos.

También puede usar dbgenerated() para establecer el valor predeterminado para los tipos admitidos. Por ejemplo, puede generar UUID a nivel de base de datos en lugar de depender del uuid() de Prisma.

Edit on GitHub