如何使用 1 knex 脚本创建整个数据库的迁移?

How to create migration of the entire DB using 1 knex script?

在我的数据库中我有大约 50 tables。每个 table 都有 created_atupdated_at。当然,我可以创建 50 个迁移,但会有类似的结果。是否有机会创建 knex 可以对整个数据库进行 50 次迁移的脚本?

这是代码示例:

exports.up = function(knex, Promise) {
  return knex.schema.alterTable("balance", table => {
    table.timestamp("created_at").defaultTo(knex.fn.now()).alter()
    table
      .timestamp("updated_at")
      .defaultTo(knex.raw("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")).alter()
  })
};

exports.down = function(knex, Promise) {
  return knex.schema.alterTable("balance", table => {
    table.dateTime("created_at").defaultTo(null).alter()
    table.dateTime("updated_at").defaultTo(null).alter()
  })
};

Balance 是 table 的名称,因此我必须创建 ~50 次迁移,仅更改 DB 的名称。是否可以仅使用 1 个 knex 脚本使一切变得更容易?

感谢解答!

就这样:

const showList = await knex.raw(
`SELECT table_name FROM information_schema.tables WHERE table_schema = 'your_db';`)

for (const item of showList[0]) {
  await knex.schema.alterTable(`${item.table_name}`, table => {
    table.timestamp("created_at").defaultTo(knex.fn.now()).alter()
    table
      .timestamp("updated_at")
      .defaultTo(knex.raw("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")).alter()
  })
}