Uso de la funcion gen_random_uuid() nativa de Postgresql en Supabase + Prismajs
Tags: postgres, supabase, prisma, pgcrypto
Published: 2022-06-07 14:27:44

---
title: Uso de la funcion gen_random_uuid() nativa de Postgresql en Supabase + Prismajs
published: true
description: Algunas funciones de bases de datos nativas son parte de una extensión. Por ejemplo, gen_random_uuid() es parte del módulo pgcrypto y el atributo de tipo nativo @db.Citext espera la extensión citext. Debe instalar la extensión para usar cualquier función o característica, PostgreSQL incluye una función para generar un UUID: gen_random_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
tags: PostgreSQL, supabase, prisma, pgcrypto
cover_image: https://www.wootsbot.dev/_next/image?url=%2Fstatic%2Fimages%2Fblog%2Fuso-de-la-funcion-gen-random-uuid-nativa-de-postgresql-en-supabase-prismajs%2Fpreview.png&w=3840&q=100
# Use a ratio of 100:42 for best results.
---


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](https://supabase.com/) + [Prismajs](https://www.prisma.io/).

> Algunas funciones de bases de datos nativas son parte de una extensión. Por ejemplo, `gen_random_uuid()` es parte del módulo [`pgcrypto`](https://www.postgresql.org/docs/10/pgcrypto.html). 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](https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#uuid)

```js
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.

```diff
  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.

```js
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()`.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zw48ebk5kfmmz8wnle2t.png)

### 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: 
- https://www.wootsbot.dev/blog/uso-de-la-funcion-gen-random-uuid-nativa-de-postgresql-en-supabase-prismajs