Diesel CLI 配置文档
Diesel CLI 是 Diesel 提供的一个可选工具,用于管理数据库 schema 。它的两个主要功能是运行数据库迁移和创建一个代表数据库 schema 的 Rust 文件。
Diesel CLI 的行为可以通过一个 toml 文件进行配置。默认情况下,Diesel 会在与 Cargo.toml
文件相同的目录下查找 diesel.toml
文件。您可以通过设置 DIESEL_CONFIG_FILE
环境变量或在命令行上传递 --config-file
来提供不同的配置文件。您可以通过运行 diesel setup
命令获得一个包含一些默认设置的基本配置文件。
在 Diesel 2.0 版本中,该文件包含一个名为 [print_schema]
的部分。此文件中的所有字段都是可选的。
file
字段
这个字段指定了您希望 Rust 代码中数据库 schema 表示形式的文件位置。当这个字段存在时,任何修改数据库 schema 的命令(比如 diesel migration run
)都会自动执行 diesel print-schema
命令,并将输出结果写入这个文件。
这意味着您可以自由地修改数必担心据库 schema ,而不要单独运行一个命令来更新 Rust 代码。强烈建议您使用这个字段,以确保 Rust 代码中数据库 schema 的表示始终与数据库中的实际内容保持一致。通常,这个字段被设置为 src/schema.rs
。
与其他字段不同,这个字段并不会改变 diesel print-schema
的行为。无论这个字段是否存在,diesel print-schema
都会将 schema 输出到标准输出,而不会写入文件。
with_docs
字段
当这个字段设置为 true
时,diesel print-schema
命令会默认启用 --with-docs
参数的行为。这意味着它会为所有表和列自动添加文档注释。
filter
字段
这个字段指定了 diesel print-schema
命令应该输出的表。它与命令行上的 --only-tables
和 --except-tables
参数相对应。它的值应该是一个映射,其中包含这两个参数中的一个。例如:
[print_schema]
# 这将导致只输出 users 和 posts 这两个表。
filter = { only_tables = ["users", "posts"] }
# 这将导致 `diesel print-schema` 输出所有表,除了 comments 表。
filter = { except_tables = ["comments"] }
schema
字段
这个字段指定了在搜索表时应使用的数据库 schema。当这个字段被设置时,diesel print-schema
命令总是表现得好像已经指定了 --schema
参数。这个字段只适用于 PostgreSQL 数据库。如果没有提供值,默认会搜索 public
schema。
generate_missing_sql_type_definitions
字段
这个字段接受一个布尔值,用于设置 diesel print-schema
是否在 schema.rs
文件中生成缺失的 SQL 类型定义。生成的 SQL 类型定义会被放置在生成的 schema.rs
文件中的一个独立的 sql_types
模块里。这将只为 diesel print-schema
生成的 table!
定义中实际使用的 SQL 类型生成定义。这些定义会自动使用自动生成的 SQL 类型定义。
如果这个字段不存在或被设置为 true
,diesel print-schema
将生成相应的定义。这个配置只为基于 PostgreSQL 的数据库系统生成自定义 SQL 类型定义,因为 SQLite 和 MySQL 使用一组固定的 SQL 类型。
[print_schema]
# 不生成缺失的 SQL 类型定义
generate_missing_sql_type_definitions = false
custom_type_derives
字段
这个字段会自动向由 generate_missing_sql_type_definitions
字段生成的 SQL 类型定义中添加 #[derive(...)]
项。 当这个字段被设置时,diesel print-schema
命令会表现得好像已经指定了 --custom-type-derives
参数。 如果这个标志为空或不包含特定的 trait,diesel::sql_types::SqlType
trait 将自动被添加。
[print_schema]
generate_missing_sql_type_definitions = true
# 为自动生成的类型添加 SqlType 和 Debug
custom_type_derives = ["diesel::sql_types::SqlType", "std::fmt::Debug"]
import_types
字段
这个字段会在每个 table!
声明的顶部添加 use
语句。当这个字段被设置时,diesel print-schema
命令会表现得好像已经指定了 --import-types
参数。 如果没有提供值,则只会从 diesel::sql_types
模块导入类型。
[print_schema]
# 添加来自 `diesel_full_text_search` 的类型, 比如 `tsvector`
import_types = ["diesel::sql_types::*", "diesel_full_text_search::types::*"]
patch_file
字段
此字段指定一个 .patch
文件,该文件将在 schema 生成后应用于您的数据库。它与命令行上的 --patch-file
选项相对应。
由于可能的定制选项非常多,我们无法为这个文件提供每一个可能的定制选项。它充当了一个通用目的的钩子,用于进行数据库 schema 的定制。
该文件应该是一个统一差异(unified diff)格式,您可以使用 diff
命令或 git diff
命令来生成。如果您已经设置了 import_types
,强烈建议您提供超过3行的上下文信息。
您可以通过在 schema.rs
文件中应用您想要的变化,然后运行 git diff -U6 > src/schema.patch
命令来轻松生成这个补丁文件。