【问题标题】:the trait `NonAggregate` is not implemented for xxx when using rust diesel使用生锈柴油时,xxx 未实现特征“NonAggregate”
【发布时间】:2022-01-15 22:39:51
【问题描述】:

我使用这个命令从 postgresql 生成 shema:

diesel migration run

然后使用 cargo build 构建这个 rust 项目,显示如下错误:

280 | / table! {
281 | |     rss_sub_source (id) {
282 | |         id -> Int8,
283 | |         sub_url -> Varchar,
...   |
316 | |     }
317 | | }
    | |_^ the trait `SelectableExpression<rss_sub_source::table>` is not implemented for `(rss_sub_source::columns::id, rss_sub_source::columns::sub_url, rss_sub_source::columns::created_time, rss_sub_source::columns::updated_time, rss_sub_source::columns::sub_status, rss_sub_source::columns::rss_type, rss_sub_source::columns::standard_type, rss_sub_source::columns::standard_version, rss_sub_source::columns::cron, rss_sub_source::columns::trigger_count, rss_sub_source::columns::next_trigger_time, rss_sub_source::columns::sub_name, rss_sub_source::columns::last_trigger_time, rss_sub_source::columns::tags, rss_sub_source::columns::source_url, rss_sub_source::columns::sub_type, rss_sub_source::columns::intro, rss_sub_source::columns::remark, rss_sub_source::columns::title_hash, rss_sub_source::columns::failed_count, rss_sub_source::columns::lang, rss_sub_source::columns::frequency_month, rss_sub_source::columns::reputation, rss_sub_source::columns::rep_lastest_refresh_time, rss_sub_source::columns::scrapy_take_time, rss_sub_source::columns::follower, rss_sub_source::columns::censor_status, rss_sub_source::columns::etag, rss_sub_source::columns::last_modified, rss_sub_source::columns::editor_pick, rss_sub_source::columns::fav_icon_url, rss_sub_source::columns::dynamic_interval, rss_sub_source::columns::local_icon_url, rss_sub_source::columns::creator)`
    |
note: required by a bound in `diesel::Table::AllColumns`
   --> /Users/xiaoqiangjiang/.cargo/registry/src/mirrors.ustc.edu.cn-61ef6e0cd06fb9b8/diesel-1.4.8/src/query_source/mod.rs:62:22

为什么会这样?我应该怎么做才能解决它?这是diesel生成的关于这个表的rust shema代码:

table! {
    rss_sub_source (id) {
        id -> Int8,
        sub_url -> Varchar,
        created_time -> Int8,
        updated_time -> Int8,
        sub_status -> Int2,
        rss_type -> Varchar,
        standard_type -> Varchar,
        standard_version -> Varchar,
        cron -> Varchar,
        trigger_count -> Int4,
        next_trigger_time -> Nullable<Timestamp>,
        sub_name -> Varchar,
        last_trigger_time -> Nullable<Timestamptz>,
        tags -> Nullable<Array<Int4>>,
        source_url -> Nullable<Varchar>,
        sub_type -> Nullable<Varchar>,
        intro -> Nullable<Varchar>,
        remark -> Nullable<Varchar>,
        title_hash -> Nullable<Varchar>,
        failed_count -> Int4,
        lang -> Nullable<Varchar>,
        frequency_month -> Nullable<Int4>,
        reputation -> Nullable<Int4>,
        rep_lastest_refresh_time -> Nullable<Int8>,
        scrapy_take_time -> Nullable<Int4>,
        follower -> Nullable<Int8>,
        censor_status -> Nullable<Int4>,
        etag -> Nullable<Varchar>,
        last_modified -> Nullable<Varchar>,
        editor_pick -> Nullable<Int4>,
        fav_icon_url -> Nullable<Varchar>,
        dynamic_interval -> Int4,
        local_icon_url -> Nullable<Varchar>,
        creator -> Int8,
    }
}

我已经通过像这样配置柴油来启用大表:

diesel = { version = "1.4.7", features = ["postgres","32-column-tables"] }

但还是不行。

【问题讨论】:

  • 您是否 100% 确定 Cargo.toml 中的所有依赖项都有相互兼容的版本?确保您已完成此操作,然后运行 ​​cargo update
  • 我确定,现在我只是通过配置柴油过滤器生成一些表格来解决这个问题,我想可能是因为一些大表格问题。 @Coder-256

标签: rust rust-diesel


【解决方案1】:

正如table! 宏的文档中明确说明的那样:

默认情况下,每个表最多允许 32 列。您可以通过启用 64-column-tables 功能将此限制增加到 64。您可以通过启用 128-column-tables 功能将其增​​加到 128。您可以通过禁用 Diesel 的默认功能将其减少到 16 列,从而缩短编译时间。请注意,启用 64 个或更大的列表将大大增加 Diesel 的编译时间。

我为该表计算了 34 列,因此仅启用 32-column-tables 不会添加必要的 trait impls。

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 2021-11-08
    • 2022-12-10
    • 2021-03-17
    • 2022-12-09
    • 2022-12-10
    • 2021-11-02
    • 2022-07-08
    • 2020-02-06
    相关资源
    最近更新 更多