关于在迁移时的原始 SQL 的一个提示

未匹配的标注

由于迁移是用原始SQL编写的,所以它们可以包含您使用的数据库系统的特定功能。例如,上面的CREATE TABLE 语句使用 PostgreSQL 的 SERIAL 类型。如果要使用 SQLite,则需要使用INTEGER. diesel GitHub 库 包含所有支持后端的修改示例。如果您使用 PostgreSQL 以外的其他后端,请确保查看这些的示例。

如果您更喜欢基于Rust代码生成迁移,则 diesel CLI 工具在 diesel migration generate 命令上提供了一个额外的 --diff schema,该命令允许基于当前模式定义和数据库生成迁移。要生成与显示的原始 SQL 迁移等效的迁移,您需要

  • 创建 schema.rs 文件写入如下内容:

    diesel::table! {
    posts (id) {
        id -> Int4,
        title -> Varchar,
        body -> Text,
        published -> Bool,
    }
    }

    table! 宏的文档 包含用于此宏的语法。 diesel::sql_types 模块 提供了用于定义相关列的SQL端类型的文档。

  • 运行 diesel migration generate --diff-schema create_posts

这将生成预填充相关sql的迁移的 up.sqldown.sql 文件。之后,您应该继续执行 diesel migration run 步骤.

在生产环境使用迁移的一个提示

在准备应用程序用于生产时,您可能希望在应用程序的初始化阶段运行迁移。您可能还希望将迁移脚本作为代码的一部分,以避免将开发环境复制进去。

diesel_migrations 包提供了 embed_migrations! 宏, 允许您在最终的二进制文件中嵌入迁移脚本。 一旦您的代码使用了它, 您只需在main 函数的开头包含 connection.run_pending_migrations(migrations),即可在每次应用程序启动时运行迁移。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~