признак `NonAggregate` не реализован для xxx при использовании rust diesel

#rust #rust-diesel

#Ржавчина #rust-дизель

Вопрос:

Я генерирую shema из postgresql с помощью этой команды:

 diesel migration run
 

Затем создайте этот проект rust, используя сборку cargo, показывает ошибку, подобную этой:

 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
 

почему это произошло? что я должен сделать, чтобы это исправить? Это код rust shema, созданный diesel для этой таблицы:

 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"] }
 

но все равно не работает.

Комментарии:

1. Вы на 100% уверены, что все ваши зависимости в Cargo.toml is имеют версии, совместимые друг с другом? Убедитесь, что вы это сделали, а затем запустите cargo update .

2. Я уверен, что теперь я просто создаю некоторую таблицу, настраивая фильтр diesel для решения этой проблемы, я думаю, это может быть из-за какой-то большой проблемы с таблицей. @Coder-256

Ответ №1:

Как явно указано в документации к table! макросу:

По умолчанию это позволяет использовать максимум 32 столбца в таблице. Вы можете увеличить это ограничение до 64, включив функцию таблиц с 64 столбцами. Вы можете увеличить его до 128, включив функцию таблиц с 128 столбцами. Вы можете уменьшить его до 16 столбцов, что увеличивает время компиляции, отключив функции Diesel по умолчанию. Обратите внимание, что включение таблиц с 64 столбцами или больше существенно увеличит время компиляции Diesel.

Я насчитал 34 столбца для этой таблицы, поэтому простое включение 32-column-tables не добавляет необходимые значения признака.