如何使用 1 knex 脚本创建整个数据库的迁移?
How to create migration of the entire DB using 1 knex script?
在我的数据库中我有大约 50 tables。每个 table 都有 created_at
和 updated_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()
})
}
在我的数据库中我有大约 50 tables。每个 table 都有 created_at
和 updated_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()
})
}