DEV Community

Cover image for Uso de la funcion gen_random_uuid() nativa de Postgresql en Supabase + Prismajs
Jorge Luis Calleja Alvarado
Jorge Luis Calleja Alvarado

Posted on • Updated on

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")
}
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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")
}
Enter fullscreen mode Exit fullscreen mode

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

Image description

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.

links:

Top comments (0)