Saltar al contenido

Eliminación de migraciones con Knex.js en mi aplicación Node.js

Posterior a consultar expertos en este tema, programadores de diversas ramas y profesores hemos dado con la solución al problema y la plasmamos en este post.

Solución:

Tuviste que revertir una migración (knex migrate:rollback) antes de eliminar el archivo, supongo que lo que puede hacer es:

touch [full_path_to_migrations_here]/migrations/20161110130954_auth_level.js

knex migrate:rollback

rm [full_path_to_migrations_here]/migrations/20161110130954_auth_level.js

Referencia aquí https://github.com/tgriesser/knex/issues/1569

Sus archivos de migración se eliminaron, pero aún se hace referencia a ellos en una tabla llamada “migraciones”.
(ver actualización a continuación), que fue generado por knex.

Debería poder comprobarlo conectándose a su base de datos local.

Enfrenté el mismo problema y lo resolví eliminando los registros correspondientes a mis archivos de migración eliminados.

delete from migrations
where migrations."name" in ('20191027220145_your_migration_file.js', ...);

EDITAR: El migraciones El nombre de la tabla puede cambiar según las opciones o la versión que utilice.
La constante se establece aquí y se usa allí.
Para estar seguro del nombre, puede enumerar todas las tablas como lo sugiere @MohamedAllal.

Espero eso ayude

Para retirar tampoco tú puedenRetroceder y así deshacer y luego quitar.

¡O no puedes! Y sigue el bramido:

(> A continuación, responda también el siguiente error que ya puede ver: <)

Error: el directorio de migración está dañado

Que pasará si

Los archivos de migración se eliminan, mientras que los registros de la tabla de migración creada por knex permanecen allí.

¡Así que simplemente límpialos!

(¡Quite y luego aclare, o aclare y luego elimine!)

Es importante tener en cuenta que la tabla de migración a estas alturas es knex_migration. ¡No sé si fue diferente en el pasado!

¡Pero mejor enumere las tablas db para asegurarse!

¡Estoy usando postgres! Usando psql:

> d

yo obtengo :

ingrese la descripción de la imagen aquí

¡Puedes hacerlo con Raw SQL! Usando su cliente de terminal db, ¡O usando knex mismo! O cualquier otro medio (un cliente editor (pgAdmin, mysql workbench, …).

SQL sin procesar

DELETE FROM knex_migration
WHERE knex_migration."name" IN ('20200425190608_yourMigFile.ts', ...);

Nota puede copiar más allá de los archivos del mensaje de error (si lo recibe)

ex: 20200425190608_creazteUserTable.ts, 20200425193758_createTestTestTable.ts

de

Error: el directorio de migración está dañado, faltan los siguientes archivos: 20200425190608_creazteUserTable.ts, 20200425193758_createTestTestTable.ts

¡Copiar y pegar! ¡Y es rápido!

(puede obtener el error al intentar migrar)

Usando knex en sí

knex('knex_migration')
    .delete()
    .whereIn('name', ['20200425190608_yourMigFile.ts', ...]);

¡Crea un guión! ¡Llame a su instancia de knex! ¡Hecho! ¡Frio!

Despues de limpiar

ingrese la descripción de la imagen aquí

¡Las migraciones se ejecutarán muy bien! ¡Y su directorio no más corrupto! ¡Cuánto amo ese verde!

¡Feliz codificación!

Eliminación de una migración: (bájela y luego elimínela para eliminarla)

¿Cuál es la forma correcta de eliminar una migración?

¡La respuesta es bajar esa migración y luego eliminar su archivo!

Ilustración

$ knex migrate:down "20200520092308_createUsersWorksTable.ts"

$ rm migrations/20200520092308_createUsersWorksTable.ts

ingrese la descripción de la imagen aquí

Puede enumerar las migraciones para verificar a continuación

$ knex migrate:list

(desde v0.19.3! Si no está disponible, actualice knex (npm i -g knex))

Modificar la migración para modificar solo (No)

¡Si eres como yo y te gusta actualizar la migración directamente en la migración base! ¡Y puede pensar en crear una migración alternativa! ejecútelo y luego elimínelo!

¡Un flujo rápido! ¡Simplemente realice la actualización en la tabla de creación base! ¡Copie el pasado en la nueva tabla alter creada! ¡Ejecutarlo y luego eliminarlo!

¡Si estás pensando de esa manera! ¡¡¡No lo hagas !!!

usted no se puede revertir ¡porque son los cambios los que quieres! ¡No puedes cancelarlos!

¡Puedes hacerlo! ¡Y luego tienes que borrar los registros! ¡O obtendrás el error! ¡Y no es genial!

¡Es mejor crear un script de archivo posterior! ¡No es un archivo de migración! ¡Y ejecútelo directamente! ¡Hecho!

Mi preferencia es crear un alter.ts (.js) en la carpeta de la base de datos. ¡Luego cree el código de esquema alterno allí! ¡Y crea un script npm para ejecutarlo!

ingrese la descripción de la imagen aquí

¡Cada vez que lo modifiques! ¡Y correr!

Aquí el esqueleto base:

import knex from './db';

(async () => 
    try 
        const resp = await knex.schema.alterTable('transactions', (table) => 
            table.decimal('feeAmount', null).nullable();
        );
        console.log(resp);
     catch (err) 
        console.log(err);
    
)();

Y mejor con vscode, solo uso el código de ejecución (si la extensión del código de ejecución está instalada, lo cual es imprescindible, hhhh).

ingrese la descripción de la imagen aquí

Y si no hay errores, ¡funciona bien! ¡Y puedes comprobar la respuesta!

Puedes comprobar el api de esquema en el doc!

También a alterar necesitarás usar alter() método como por el fragmento de abajo que tomé del documento:

// ________________ alter fields
// drops previous default value from column, change type
// to string and add not nullable constraint
table.string('username', 35).notNullable().alter();
// drops both not null constraint and the default value
table.integer('age').alter();

¡Feliz codificación!

Puntuaciones y comentarios

Nos puedes corroborar nuestro estudio dejando un comentario o dejando una valoración te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *