Drizzle: undefined (reading 'compositePrimaryKeys') fallo
Programming
3/10/2024
3 minutes
Author: Dawid

Available languages:

Drizzle: undefined (reading 'compositePrimaryKeys') fallo

Así que empezaste tu proyecto con Drizzle, y luego quisiste cambiar el nombre de la tabla con drizzle-kit, pero en lugar de actualizar con éxito el nombre de tu tabla, obtuviste TypeError: Cannot read properties of undefined (leyendo 'compositePrimaryKeys')?

Permítame explicarle por qué se produce este error y su posible solución.

Como probablemente sepa (o no), Drizzle-kit está en versión beta y este problema en particular es muy conocido en Drizzle-kit, pero desafortunadamente no está solucionado desde 2023. Este TypeError ocurre cuando se tiene una tabla con FK (Foreign keys), por ejemplo tenemos una tabla llamada session:

export const sessions = createTable(
"session",
{
sessionToken: varchar("sessionToken", { length: 255 })
.notNull()
.primaryKey(),
userId: varchar("userId", { length: 255 }).notNull(),
expires: timestamp("expires", { mode: "date" }).notNull(),
},
(session) => ({
userIdIdx: index("session_userId_idx").on(session.userId),
}),
);

Como puede ver, tenemos una conexión entre la tabla de sesiones y la tabla de usuarios.

Ahora si queremos renombrar la tabla de sesiones a por ejemplo => Sessions entonces obtendremos un TypeError 'compositePrimaryKeys' que nos llevará a la pérdida de datos (borrando toda la tabla). Usted no quiere hacer esto.

He encontrado una solución que funciona bastante bien. Así que si usted está recibiendo este error y desea, por ejemplo, cambiar el nombre de la tabla, entonces usted necesita para hacerlo manualmente a través de MySQL (Estoy usando MySQL como db, pero va a trabajar en cualquier otro idioma). Si aloja su base de datos en proveedores externos como PlanetScale, entonces puede ejecutar directamente los scripts MySQL a través de la interfaz de usuario (si aloja localmente puede utilizar PHP Admin o alguna otra cosa). Los scripts son bien conocidos, por lo que no debería ser tan difícil de hacer, pero hay que tener cuidado, ya que puede romper su base de datos, es por eso que recomiendo hacer una copia de seguridad de base de datos antes de hacerlo. En mi caso de uso, quería renombrar mi tabla, así que ejecuto: RENAME TABLE old_table TO new_table

Después de eso, la tabla fue renombrada con éxito, y no rompí nada en Database y Drizzle Schema.

Como ya he dicho este bug en Drizzle-kit es conocido en la Comunidad y puedes seguir el progreso en este hilo de GitHub: https://github.com/drizzle-team/drizzle-orm/issues/1144

Espero haberte podido ayudar. Si tienes alguna pregunta, no dudes en comentar o contactar conmigo.

About the author

avatar

Penify creator, Fullstack developer, Typescript, Web, Apps, Blogger

I am an experienced Fullstack web developer and the creator of Penify blog platform. I am excited and motivated to explore new technologies. I am a dedicated and hardworking person with a will to create the best user experience.

compositePrimaryKeys
Drizzle
Drizzle-kit
fix
MySQL
TypeError

Comments

Be the first to comment on this article!