问题标签 [rust-diesel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
696 浏览

database - 检查某个数据库条目是否已存在于 DIesel/Rust 中

我目前正在使用 Diesel-Framework 在 Rust 中开发一个数据库。

我的任务是通过比较主键来检查表中的条目是否已经存在。

我使用 Uuid-Crate 生成主键:

如果主键还不存在,我想在数据库中插入一个新条目。另一方面,如果已经存在具有相同 Uuid 的主键,我不想插入到数据库中。

现在我正在寻找一种适当的方法来管理这项任务——我考虑过使用查找功能,但我还不确定如何去做。

0 投票
2 回答
2543 浏览

database - 如何使用锈柴油创建新数据库?

是否可以使用 Rust 的柴油数据库箱创建新数据库?我在文档中找不到任何东西。我对 Sqlite 特别感兴趣。

0 投票
1 回答
2907 浏览

compiler-errors - Rust 编译错误:进程没有成功退出

最近,我一直无法cargo run在 Rust 中做。我得到的错误是 error: process didn't exit successfully: target\debug\backend.exe (exit code: 0xc0000138, STATUS_ORDINAL_NOT_FOUND)

它发生在编译器似乎说完之后 Finished dev [unoptimized + debuginfo] target(s) in 2m 43s Running target\debug\backend.exe

我试过 runningcargo clean和 running cargo run,但我得到了同样的错误。cargo fix似乎也没有帮助。

0 投票
2 回答
774 浏览

rust - 为泛型类型编写 Diesel CRUD 操作

我正在尝试编写一个 Rust crate,它在使用Diesel创建简单的 CRUD 操作时从用户那里删除一些样板代码

例如,如果您有这样的柴油机Insertable

我希望 crate 用户只写create<UserCreate>(model, pool),将结构字段插入数据库行。

为此,我编写了以下函数签名(例如简化):

问题是编译器抱怨一些缺失的特征边界 forC&Cat.execute(&conn)我不太确定如何将它们放在where子句中,可能还有一种我不知道的更简单的方法。任何提示都非常受欢迎!

编译器输出:

非常感谢!

0 投票
1 回答
147 浏览

rust - 为 Diesel“可插入”结构指定生命周期参数有什么好处

从diesel.rs 文档中,我看到了以下示例:

事实上,每个官方示例都为 Insertable 指定了一个生命周期参数。但是,当我在 github 上阅读真实示例时,“在野外”看到的每个 Insertable 结构都省略了生命周期参数,而是定义了类似的结构:

在数据库性能方面,一种方法是否比另一种方法有优势?如果我以一种或另一种方式做,我会遇到问题吗?

0 投票
2 回答
655 浏览

rust - 如何通过 wasm-pack 将 Rust Wasm 应用程序与 libpq 链接?

我正在尝试使用 Wasm 数据库层创建 NodeJS 应用程序。我使用 Rust、Diesel 作为数据库驱动程序和wasm-packWebAssembly 编译器。

当我尝试使用 构建我的服务时wasm-pack,尝试链接libpq库失败。设置了PQ_LIB_DIR环境变量,并且diesel-cli没有任何问题,但是当我尝试编译我的服务时它失败并出现以下错误:

我该如何解决?

我的系统:

  • 操作系统:Windows 10
  • :1.38.0
  • wasm 包:0.8.1
  • 柴油:1.4.0
  • PostgreSQL : 12
0 投票
1 回答
1907 浏览

rust - 柴油机应该使用同步参与者 actix_web::web::block 还是 futures-cpupool 运行?

背景

我正在通过 r2d2 使用柴油开发一个 actix-web 应用程序,并且不确定如何最好地进行异步查询。我找到了三个看起来合理的选项,但不确定哪个是最好的。

潜在的解决方案

同步演员

对于一个我可以使用actix 示例,但它非常复杂,并且需要大量的样板来构建。我希望有一个更合理的解决方案。

Actix_web::web::block

作为另一种选择,我可以使用actix_web::web::block将我的查询函数包装到未来,但我不确定这对性能的影响。

然后查询是否在同一个 Tokio 系统中运行?根据我在源代码中可以找到的内容,它在底层 actix-web threadpool 中创建了一个线程。那是问题吗?

如果我没看错代码,r2d2 在获取连接时会阻塞它的线程,这会阻塞部分核心 actix-web 池。与数据库查询相同。如果我执行的查询多于该池中的线程数,这会阻止所有 actix-web 吗?如果是这样,问题就大了。

期货-cpupool

最后,可能有一些不必要的开销的安全赌注是futures-cpupool。主要问题是这意味着在我的项目中添加另一个板条箱,尽管我不喜欢在我的应用程序中不必要地浮动多个 cpu 池的想法。

由于 r2d2 和柴油都会阻塞,因此这里有很多棘手的事情。

最重要的是,不要与不使用同一个 r2d2 池的任何东西共享这个 cpupool(因为创建的所有线程可能只是阻塞等待 r2d2 连接,当工作存在时锁定整个池)。

其次(更明显一点),因此您不应该比池中的线程拥有更多的 r2d2 连接,反之亦然,因为较大的连接会浪费资源(未使用的连接/线程不断阻塞)(可能多一个线程,可能更快由 OS 调度程序而不是 cpupool 调度程序进行连接切换)。

最后,请注意您使用的是什么数据库以及那里的性能。在写入繁重的 sqlite 应用程序中运行单个连接 r2d2 和池中的单个线程可能是最好的(尽管我会推荐一个合适的数据库)。

旧答案

可能有效的旧解决方案

https://www.reddit.com/r/rust/comments/axy0hp/patterns_to_scale_actixweb_and_diesel/

本质上,推荐 Futures-cpupool。

在 future-rs 中封装阻塞 I/O 的最佳方法是什么?

一般情况下推荐 Futures-cpupool。

不起作用的旧解决方案

https://www.reddit.com/r/rust/comments/9fe1ye/noob_here_can_we_talk_about_async_and_databases/

对旧的 actix-web 版本的一个非常好的修复。从我可以找到的请求中不再有 cpu 池。

0 投票
0 回答
24 浏览

rust - 序列化 Diesel 类型时如何加入另一个表?

我正在尝试为我的结构实现序列化程序:

我想One用柴油从数据库中获取结构并用 serde 打印它。我找到了serialize_with可以应用到的属性two_id。我将如何使用给定的接口实现这样的方法:在我的查询对象上fn<'de, D>(D) -> Result<T, D::Error> where D: Deserializer<'de>调用?json!(get_two_from_db())

我希望能够调用json!(one)并自动获取加入的对象。

0 投票
0 回答
946 浏览

postgresql - 如何从 Diesel sql 函数中获取返回值

我有一个我想使用 Diesel 调用的 SQL 函数(在 Postgres 中)。我已经用sql_function!宏声明了它,我可以调用函数OK。但我无法获得返回值——它总是返回1,我假设这是一个行数。我怎样才能得到实际的返回值?

当我my_add从 Postgres CLI 调用时,它可以正常工作:

这是my_add功能

0 投票
0 回答
337 浏览

rust - 如何在 Diesel Rust 中求和?

复现项目:https ://github.com/Jasperav/sumdieselrust

问题出在方法money_donated上。我在“捐赠”表中有一个“捐赠”列。我想总结数据库中的所有值并将结果作为 JSON 上的值返回。但是,我对 Diesel 中的所有类型都遇到了麻烦,我不明白如何进行简单的求和。

我得到的编译错误是:

^^^^^ diesel::deserialize::FromSql<diesel::sql_types::Nullable<diesel::sql_types::Numeric>, diesel::pg::Pg>未实现该特征i32

对于这一行:

在项目中,我试图实现这个特性FromSql,然后我想,所有这些工作对于像这样简单的事情来说太多了,所以也许我错过了重点并且做了太多的工作。

我在这里阅读了文档:https ://docs.diesel.rs/diesel/dsl/fn.sum.html以及这个问题:https ://github.com/diesel-rs/diesel/issues/210 。我仍然无法弄清楚如何使它工作。