首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种方法来压缩迁移,或者在Adonis Lucid中基线数据库?

是否有一种方法来压缩迁移,或者在Adonis Lucid中基线数据库?
EN

Stack Overflow用户
提问于 2022-02-23 16:16:29
回答 1查看 288关注 0票数 2

我想要一种从Adonis生态系统中现有数据库中以编程方式生成迁移的方法。例如,在每次测试运行期间必须运行500个迁移是烦人的,而且需要时间,我希望将迁移压缩到一个初始迁移的某个点。在Adonis CLI中有办法做到这一点吗?到目前为止,我的研究得出了否定的结论,我只需手工创建一个初始迁移,以匹配数据库的当前状态,这似乎非常容易出错。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-25 19:10:58

没有官方的方法。

我也遇到了同样的问题,并决定通过在干净数据库上运行所有迁移,然后将整个数据库转储导出到sql文件中来解决这个问题,该文件将作为第一次迁移运行,如下所示:

代码语言:javascript
运行
复制
export default class NewVersion extends BaseSchema {
  public async up() {
    this.defer(async (db) => {
      const sql = await readFile(path.join(__dirname, '../versions/dumps/v1.0.0.sql'), 'utf-8')
      await db.rawQuery(sql)
    })
  }

为了保持所有的组织,我做了这样的文件夹结构:

这样,如果我需要检查特定的东西,我可以访问所有的迁移。

还有一件事。最后一次迁移( v0.0.0 )是:

从@ioc:Adonis/Lucid/Schema导入BaseSchema

代码语言:javascript
运行
复制
export default class EndVersion extends BaseSchema {
  public async up() {
    this.defer(async (db) => {
      const lastBatch = await db.from('adonis_schema').orderBy('batch', 'desc').firstOrFail()
      await db.table('adonis_schema').insert({
        name: 'database/migrations/1644361478305_VERSION_1.0.0',
        batch: lastBatch.batch + 1,
      })
    })
  }

  public async down() {
    this.defer(async (db) => {
      await db
        .from('adonis_schema')
        .where('name', 'database/migrations/1644361478305_VERSION_1.0.0')
        .delete()
    })
  }
}

此迁移将新的第一次迁移( sql转储迁移)设置为已完成的迁移,因为我不希望它在已经运行所有迁移的数据库上运行。

这样,我就可以在生产服务器上实现干净的迁移状态。而新的移民可能会继续堆积。

更好的一点是,我从零开始的迁移运行从几分钟以上下降到20秒。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71240508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档