Resumen de Prisma 6
Prisma 6 introduce Typed SQL, que aporta seguridad de tipos a las consultas SQL raw. También incluye mejoras en el rendimiento de consultas y nuevas funciones del cliente.
Typed SQL
Proporciona seguridad de tipos completa para consultas SQL raw.
// sql/getUserWithPosts.sql
-- @param {Int} $1:userId
SELECT
u.id,
u.name,
u.email,
json_agg(p.*) as posts
FROM users u
LEFT JOIN posts p ON p.author_id = u.id
WHERE u.id = $1
GROUP BY u.id;
// Función generada con seguridad de tipos
import { getUserWithPosts } from '@prisma/client/sql';
const result = await prisma.$queryRawTyped(
getUserWithPosts(123)
);
// result tiene tipos completos
console.log(result.name); // string
console.log(result.posts); // Post[]
Mejoras de rendimiento
Optimización del motor de consultas
Benchmark Prisma 5 vs Prisma 6:
- findMany simple: 15% más rápido
- Consultas con relaciones: 25% más rápido
- Obtención de grandes volúmenes de datos: 30% más rápido
Mejoras en procesamiento por lotes
// Batching automático
const users = await Promise.all([
prisma.user.findUnique({ where: { id: 1 } }),
prisma.user.findUnique({ where: { id: 2 } }),
prisma.user.findUnique({ where: { id: 3 } }),
]);
// Se agrupa internamente en una sola consulta
Nuevas funciones del cliente
Exclusión de campos con omit
// Excluir el campo de contraseña
const user = await prisma.user.findUnique({
where: { id: 1 },
omit: {
password: true
}
});
// user.password no existe
relationLoadStrategy
// Estrategia explícita de carga de relaciones
const user = await prisma.user.findUnique({
where: { id: 1 },
include: {
posts: true
},
relationLoadStrategy: 'join' // o 'query'
});
Prisma Client Extensions mejorado
const prisma = new PrismaClient().$extends({
model: {
user: {
// Método personalizado
async signUp(email: string, password: string) {
const hashedPassword = await hash(password);
return prisma.user.create({
data: { email, password: hashedPassword }
});
}
}
},
query: {
$allModels: {
// Hook aplicado a todos los modelos
async $allOperations({ model, operation, args, query }) {
const start = Date.now();
const result = await query(args);
console.log(`${model}.${operation}: ${Date.now() - start}ms`);
return result;
}
}
}
});
// Uso
await prisma.user.signUp('user@example.com', 'password123');
Mejoras en migraciones
Migración diferencial
# Verificar diferencias antes de migrar
prisma migrate diff \
--from-schema-datamodel prisma/schema.prisma \
--to-schema-datasource prisma/schema.prisma
# Ejecutar migración
prisma migrate dev --name add_user_profile
Rollback de migraciones
# Revertir la última migración
prisma migrate rollback
Prisma Accelerate
Funciones de connection pooling y caché en el edge.
import { PrismaClient } from '@prisma/client/edge';
import { withAccelerate } from '@prisma/extension-accelerate';
const prisma = new PrismaClient().$extends(withAccelerate());
// Consulta con caché
const users = await prisma.user.findMany({
cacheStrategy: {
ttl: 60,
swr: 120
}
});
Guía de migración
# Actualizar a Prisma 6
npm install prisma@latest @prisma/client@latest
# Regenerar el cliente
npx prisma generate
Cambios incompatibles
| Cambio | Solución |
|---|---|
| Node.js 18 o superior requerido | Actualizar Node.js |
| Algunos valores por defecto cambiados | Configurar explícitamente |
Resumen
Prisma 6 ha evolucionado hacia un ORM más potente con seguridad de tipos para SQL raw mediante Typed SQL, mejoras de rendimiento y nuevas funciones del cliente. Typed SQL es especialmente útil cuando necesitas escribir consultas complejas.
← Volver a la lista