关于在迁移时的原始 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.sql
和 down.sql
文件。之后,您应该继续执行 diesel migration run
步骤.
在生产环境使用迁移的一个提示
在准备应用程序用于生产时,您可能希望在应用程序的初始化阶段运行迁移。您可能还希望将迁移脚本作为代码的一部分,以避免将开发环境复制进去。
diesel_migrations 包提供了 embed_migrations!
宏, 允许您在最终的二进制文件中嵌入迁移脚本。 一旦您的代码使用了它, 您只需在main
函数的开头包含 connection.run_pending_migrations(migrations)
,即可在每次应用程序启动时运行迁移。