#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
не добавляет необходимые значения признака.