Postgresql 没有为“bigdecimal::bigdecimal”实现特性“diesel::Expression”`
我正在尝试创建一个可以在diesel中用于插入的结构。具体来说,我正在使结构可插入。在编译时,我得到了这个错误 我有一个结构,我正试图通过派生属性使其可插入。我有一个名为Postgresql 没有为“bigdecimal::bigdecimal”实现特性“diesel::Expression”`,postgresql,rust,rust-diesel,Postgresql,Rust,Rust Diesel,我正在尝试创建一个可以在diesel中用于插入的结构。具体来说,我正在使结构可插入。在编译时,我得到了这个错误 我有一个结构,我正试图通过派生属性使其可插入。我有一个名为Bounty的字段,它应该表示金钱,所以我使用bigdecimic作为类型。编译后,我得到了标题中的错误。我也尝试过使用f64,但也会出现同样的错误 #[macro_use] extern crate diesel; extern crate bigdecimal; mod schema { use bigdecima
Bounty
的字段,它应该表示金钱,所以我使用bigdecimic
作为类型。编译后,我得到了标题中的错误。我也尝试过使用f64,但也会出现同样的错误
#[macro_use]
extern crate diesel;
extern crate bigdecimal;
mod schema {
use bigdecimal::BigDecimal;
table! {
Threads (Id) {
Id -> Int8,
Views -> Int4,
Points -> Int4,
FlagPoints -> Int4,
IsDisabled -> Bool,
IsAnswered -> Bool,
Bounty -> Numeric,
Title -> Varchar,
Body -> Text,
UserId -> Int8,
CreatedBy -> Varchar,
CreatedOn -> Timestamptz,
LastModifiedBy -> Varchar,
LastModifiedOn -> Timestamptz,
}
}
#[allow(non_snake_case)]
#[derive(Debug, Insertable)]
#[table_name = "Threads"]
pub struct InsertableThread {
pub Bounty: BigDecimal,
pub Title: String,
pub Body: String,
pub UserId: i64
}
}
fn main() {}
我把我的结构放在它自己的文件中,这是完整的代码。结构线程
编译时不会出现问题。错误发生在InsertableThread
上,因为它是使用BigDecimal
的线程。这就是导致的错误
error[E0277]:特性绑定'bigdecimal::bigdecimal:diesel::Expression'不满足
-->src/main.rs:29:21
|
29 |#[派生(调试,可插入)]
|^^^^^^^^^^未为` bigdecimal::bigdecimal'实现特性` diesel::Expression'`
|
=注意:由于对`bigdecimal::bigdecimal`的`diesel::expression::AsExpression`的impl有要求,因此必须输入`
错误[E0277]:未满足特性绑定的`bigdecimal::bigdecimal:diesel::Expression`
-->src/main.rs:29:21
|
29 |#[派生(调试,可插入)]
|^^^^^^^^^^未为` bigdecimal::bigdecimal'实现特性` diesel::Expression'`
|
=注意:由于“&bigdecimal::bigdecimal”的“diesel::Expression”impl中的要求,因此需要`
=注意:由于“&bigdecimal::bigdecimal”的“diesel::expression::AsExpression”impl中的要求,因此需要此选项`
错误[E0277]:未满足特性绑定的`bigdecimal::bigdecimal:diesel::Expression`
-->src/main.rs:29:21
|
29 |#[派生(调试,可插入)]
|^^^^^^^^^^未为` bigdecimal::bigdecimal'实现特性` diesel::Expression'`
|
=注意:由于`&'insert bigdecimal::bigdecimal::Expression`的impl中的要求,因此需要`
=注意:由于`&'insert bigdecimal::bigdecimal::AsExpression`的impl要求,因此必需`
我使用的是Rust 1.34、diesel 1.4.2和Postgres 11
我愿意更改数据库、Postgres或Rust代码中的类型。数据库使用numeric
,在Rust代码中,我尝试了f64
和bigdecimic
。我也愿意自己直接实现这个特性,但是我需要一些关于如何实现的指导,因为我找不到示例。Diesel使用它来选择增强功能
我还没有找到关于这些的清晰文档页面,但它们列在:
您需要启用数值功能,并确保使用与Diesel兼容的bigdecimal版本:
[dependencies]
diesel = { version = "1.4.2", features = ["numeric"] }
bigdecimal = "0.0.14"
代码编译:
#[macro_use]
extern crate diesel;
use crate::schema::threads;
use bigdecimal::BigDecimal;
mod schema {
table! {
threads (id) {
id -> Int4,
bounty -> Numeric,
}
}
}
#[derive(Debug, Insertable)]
#[table_name = "threads"]
pub struct InsertableThread {
pub bounty: BigDecimal,
}
另见:
the trait `diesel::Expression` is not implemented for `(schema::..., schema::..., schema::...)`
这只是提醒您计算表中的列数!{}
宏,因为您可能达到默认的32列限制
根据,如果使用的列多于默认的32列,则应使用以下功能
64列(Cargo.toml)
diesel={version=“1.4”,features=[…,“64列表”]}
128列(Cargo.toml):
diesel={version=“1.4”,features=[…,“128列表”]}
使用更多的列是不可能的,这可能暗示表的设计并不理想(请参见:)。提供struct
Thread
有什么作用?是否需要重现错误?请确保您的问题是最小的。请尝试以可读的方式格式化您的问题。编辑器提供UI按钮以帮助您正确设置格式。如果您不熟悉降价,您可以查看对问题所做的现有编辑,还有一个实时预览,以便您知道要提交的内容。您提供的代码不会报告您询问的错误。相反:编译器目前不知道属性table_name
,将来可能会增加它的含义。请检查如何创建一个,然后检查您的问题以将其包括在内。试着在一个全新的货运项目中重现你的错误。有,您可以使用来减少您在此处发布的原始代码。是否需要包含所有这些依赖项(如“sparkpost”)来生成错误?是否需要标题
、赏金
等字段?请确保您的密码是最小的。谢谢Shepmaster。除此之外,我不得不将我的BigDecimal版本降级到0.0.14。diesel是否有兼容版本列表或类似的外部板条箱依赖项,如此?@user583824这就是我提供“请参阅”链接的原因,这是我如何解决的。如果您遇到类似问题,但有其他类型的问题,也请检查“extras”功能。我刚刚花了两个小时想弄明白为什么我的日期不起作用。这个答案和这个问题有什么关系,这个问题是关于bigdecimal::bigdecimal
?@Shepmaster谢谢你的评论。我补充了一个解释。当搜索错误消息时,很容易在本页上发现错误消息略有不同。我正是来问这个问题的,因为我有33列,应该告诉大家,鉴于错误的详细程度,这里是我的+1^32。这正是我遇到的情况。非常感谢。
the trait `diesel::Expression` is not implemented for `(schema::..., schema::..., schema::...)`