如何重新运行 Diesel 迁移?

Posted

技术标签:

【中文标题】如何重新运行 Diesel 迁移?【英文标题】:How to re-run Diesel migrations? 【发布时间】:2021-04-27 16:50:27 【问题描述】:

我将 Diesel 与 PostgreSQL 一起使用。我添加了我的迁移,它们运行良好,输出了 schema.rs 文件中的所有内容。直到我注意到我在一些迁移中丢失了created_at 字段。我编辑了 SQL 并运行了diesel migration run。什么也没发生,没有错误,没有成功。有没有办法解决这个问题并重新运行我的迁移?

【问题讨论】:

【参考方案1】:

命令

diesel migration run

仅应用迁移。如果您想恢复迁移,您必须运行:

diesel migration revert

结合使用这些命令,您可以像这样“重做”已应用的迁移:

diesel migration revert
diesel migration run

这种模式很常见,以至于diesel 提供了这个快捷命令,其作用与上述 2 个命令相同:

diesel migration redo

注意:所有这些命令一次只能运行、恢复或重做一个迁移。如果您想运行、恢复或重做多个迁移或所有迁移,您将不得不多次手动运行命令,直到发布新版本的 diesel 并且 this feature 可用时,当您'将能够通过简单地运行来重做所有迁移:

diesel migration redo all

注意:所有命令只有在您为要恢复或重做的每个迁移都编写了down.sql 时才能正常工作。

【讨论】:

我运行 diesel migration redo 并且它工作但它仍然没有更新 schema.rs 这里的 GitHub 仓库:github.com/henryboisdequin/vsreview 我已经更新了我的答案。运行diesel migration redo all 哦,this PR was merged 3 months ago 但不幸的是,从那时起柴油机尚未发布,因此该功能尚不可用。您将不得不手动运行diesel migration revert,无论您需要恢复多少迁移,然后运行diesel migration run 来重做所有迁移。 谢谢,它可以工作,但 Diesel 需要发布该功能...【参考方案2】:

正确的过程是创建一个新的迁移 (diesel migration generate),然后将 ALTER 语句添加到 up.sql 以更改现有架构。然后你可以简单地diesel migration run。完成后,您可以使用 diesel print-schema 获取更新的代码以写入 schema.rs。

【讨论】:

以上是关于如何重新运行 Diesel 迁移?的主要内容,如果未能解决你的问题,请参考以下文章

Diesel 可以在运行时更改架构吗?

如何使用 SQL 函数和用户提供的输入创建自定义 Diesel 查询?

重新运行 Django 数据迁移

如何使用 Diesel 将 i64 与 Insertable 一起使用

如何使用 Diesel 执行“更新自”?

如何在 laravel 中运行特定迁移 [重复]