如何重新运行 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 迁移?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SQL 函数和用户提供的输入创建自定义 Diesel 查询?