无法使用 UUID 作为主键:Uuid: diesel::Expression 不满足
Cannot use UUID as a primary key: Uuid: diesel::Expression is not satisfied
我想将 UUID 字段作为 Postgres table 中的主要字段,但出现以下错误:
error[E0277]: the trait bound `uuid::Uuid: diesel::Expression` is not satisfied
--> database/src/models.rs:3:35
|
3 | #[derive(Debug, Clone, Queryable, Insertable)]
| ^^^^^^^^^^ the trait `diesel::Expression` is not implemented for `uuid::Uuid`
|
= note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Uuid>` for `uuid::Uuid`
一些较旧的问题是关于柴油的 UUID,但其中 none 是插入的table,我在其中得到了错误。我在 actix web 中使用柴油。
这是我的模型:
use crate::schema::users;
#[derive(Debug, Clone, Queryable, Insertable)]
#[table_name="users"]
pub struct User {
pub id: uuid::Uuid,
pub phone: String,
pub name: String,
pub password: String,
}
还有我的 table 模式
table! {
users (id) {
id -> Uuid,
name -> Text,
phone -> Text,
password -> Text,
}
}
我发现一些旧的 post 表明该字段可能可以为空,但 id
是我的 table up.sql 中的 PRIMARY KEY
,所以它不可为空。
table是diesel-cli生成的,好像没有问题。
这是我的 Cargo.toml
diesel = { version = "1.0.0", features = ["postgres", "r2d2", "uuid"] }
uuid = { version = "0.8", features = ["v4"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
查看您的 Cargo.lock
文件中的内容总是很好,并且看起来指向包依赖项。
[[package]]
name = "diesel"
version = "1.4.4"
...
"uuid 0.6.5", <-- It was older version even I've installed newest version of uuid
]
将功能更改为 uuidv07
和 运行 cargo update
Cargo.lock 文件也会更改。如果你想检查哪个 Uuid
被柴油应用。可以通过查看 diesel::sql_types::Uuid
的来源来检查它,以确保它们使用与 uuid::Uuid
.
相同的版本
P.S:@weiznich 在问题 post 中评论了答案,只是添加了一点详细信息作为答案 post 谁,谁不阅读评论并寻找只回答
我想将 UUID 字段作为 Postgres table 中的主要字段,但出现以下错误:
error[E0277]: the trait bound `uuid::Uuid: diesel::Expression` is not satisfied
--> database/src/models.rs:3:35
|
3 | #[derive(Debug, Clone, Queryable, Insertable)]
| ^^^^^^^^^^ the trait `diesel::Expression` is not implemented for `uuid::Uuid`
|
= note: required because of the requirements on the impl of `diesel::expression::AsExpression<diesel::sql_types::Uuid>` for `uuid::Uuid`
一些较旧的问题是关于柴油的 UUID,但其中 none 是插入的table,我在其中得到了错误。我在 actix web 中使用柴油。
这是我的模型:
use crate::schema::users;
#[derive(Debug, Clone, Queryable, Insertable)]
#[table_name="users"]
pub struct User {
pub id: uuid::Uuid,
pub phone: String,
pub name: String,
pub password: String,
}
还有我的 table 模式
table! {
users (id) {
id -> Uuid,
name -> Text,
phone -> Text,
password -> Text,
}
}
我发现一些旧的 post 表明该字段可能可以为空,但 id
是我的 table up.sql 中的 PRIMARY KEY
,所以它不可为空。
table是diesel-cli生成的,好像没有问题。
这是我的 Cargo.toml
diesel = { version = "1.0.0", features = ["postgres", "r2d2", "uuid"] }
uuid = { version = "0.8", features = ["v4"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
查看您的 Cargo.lock
文件中的内容总是很好,并且看起来指向包依赖项。
[[package]]
name = "diesel"
version = "1.4.4"
...
"uuid 0.6.5", <-- It was older version even I've installed newest version of uuid
]
将功能更改为 uuidv07
和 运行 cargo update
Cargo.lock 文件也会更改。如果你想检查哪个 Uuid
被柴油应用。可以通过查看 diesel::sql_types::Uuid
的来源来检查它,以确保它们使用与 uuid::Uuid
.
P.S:@weiznich 在问题 post 中评论了答案,只是添加了一点详细信息作为答案 post 谁,谁不阅读评论并寻找只回答