1

r2d2_postgres用来运行原始 SQL 并直接在 Actix 响应中返回结果。

我需要在编译时使用动态数据、类型和未知的列/数据类型等运行原始 sql。为此,我遇到了serde_json::value::RawValue

它指出:“RawValue 可用于将有效负载的部分解析推迟到以后,或者在部分有效负载只需要逐字传输到不同的输出对象的情况下完全避免解析它。”

https://docs.serde.rs/serde_json/value/struct.RawValue.html

我基本上想完全避免解析它,而只是将它发送到 Actix 客户端。

这是我的代码:

let mut conn = pool.get().expect("Couldn't get db connection from pool");
let result = web::block(move || conn.query("select jsonb_agg(t) from (select * from useraccountview) t",&[]))
        .await;

match result {
        Ok(result) => {
            let foo : serde_json::value::RawValue = result[0].get(0);
            HttpResponse::Ok().content_type("application/json").json(foo)
        },
        Err(e) => HttpResponse::NotAcceptable().body(e.to_string())
    }

这给了我2个错误:

error[E0277]: the trait bound `serde_json::value::RawValue: FromSql<'_>` is not satisfied
   --> src/main.rs:188:63
    |
188 |             let foo : serde_json::value::RawValue = result[0].get(0);
    |                                                               ^^^ the trait `FromSql<'_>` is not implemented for `serde_json::value::RawValue`



error[E0277]: the size for values of type `str` cannot be known at compilation time
   --> src/main.rs:188:17
    |
188 |             let foo : serde_json::value::RawValue = result[0].get(0);
    |                 ^^^ doesn't have a size known at compile-time

我对 Rust 很陌生,所以我可能缺少一些关于如何解决这个问题的概念。

4

0 回答 0