我有以下在数据库中创建表的迁移文件,该文件名为20211215154722_assist_tracking.js:
const { ASSIST_TABLE } = require('../repo/tables');
const up = async (knex) => {
const exists = await knex.schema.hasTable(ASSIST_TABLE);
if (!exists) {
await knex.schema.createTable(ASSIST_TABLE, (table) => {
table.string('email', 40);
});
}
};
const down = async (knex) => {
await knex.schema.dropTable(ASSIST_TABLE);
};
module.exports = {
up,
down
};
我有另一个将数据填充到上面创建的表中的迁移,此文件名为20220120190740_ttp-balances.js :
const { ASSIST_TABLE } = require('../repo/tables');
const getTTPBalances = require('../usecase/utils');
const up = async (knex) => {
const exists = await knex.schema.hasTable(ASSIST_TABLE);
if (exists) {
const ttpBalances = getTTPBalances();
// Deletes ALL prior entries from the Assist table
await knex(ASSIST_TABLE)
.del()
.then(async () => {
await knex(ASSIST_TABLE).insert(ttpBalances);
});
}
};
const down = async (knex) => {
await knex(ASSIST_TABLE).del();
};
module.exports = {
up,
down
};
据我所知,当我执行以下命令时:knex migrate:latest
所有迁移都是按顺序完成的(按创建时间顺序)。正如我们所看到的,第一个文件应该首先运行,然后是第二个文件。问题如下:
当我删除表(使用knex migrate:down 20211215154722_assist_tracking.js
),运行表迁移knex migrate:up 20211215154722_assist_tracking.js
(基本上再次构建表),然后尝试使用填充数据knex migrate:up 20220120190740_ttp-balances.js
时,它不起作用。但是,当我使用 删除数据knex migrate:down 20220120190740_ttp-balances.js
,然后使用 再次填充knex migrate:up 20220120190740_ttp-balances.js
,而不删除表格时,效果很好。似乎删除了表,打断了流程,即使重新创建了表,以后也不会填充数据。为什么会发生这种情况?