3
Создаю таблицу, имя которой не совпадает с ее именем записи. Ниже приведен фрагмент кода Выход исключения Mnesia: {aborted, {bad_type, Record}}
%% ---- record definition -------------------------------- -record(object,{key,value}).При этом mnesia кричит громко с исполнением. Таблица создана очень хорошо и может быть просмотрена в
%% ---- create table ------------------------------------- {atomic,ok} = mnesia:create_table(mytable,[ {type,set}, {frag_properties,[ {node_pool,[node()]}, {n_fragments,4}, {n_disc_copies,1}]}, {attributes,record_info(fields,object)}] ),
%% ------- inserting --------------------------------
insert()-> F = fun() -> R = #object{ key = "MyKey", value = "Value" }, mnesia:write(mytable,R,write) end, mnesia:activity(transaction,F,[],mnesia_frag).
tv:start().
или в
mnesia:info().
. Это ошибка, которую я вижу в своей оболочке.
** exception exit: {aborted, {bad_type, #object{ key = "MyKey", value = "Value"}}} in function mnesia:wrap_trans/6 (mnesia.erl, line 395)Теперь, как правило, я думал, что получится такая ошибка, когда определение записи, используемое при создании таблицы, отличается от структуры записи, вставленной в таблицу. Интересно, это просто проблема с функцией, которую я использую, то есть:
mnesia:write/3
, которая помогает, когда имя таблицы отличается от имени записи.
Я попытался удалить схему и создать ее заново, но все напрасно. Когда я не использую
mnesia:write/3
, запись будет правильно вставлена в таблицу. Но мои потребности приложения таковы, что у меня будет несколько разных таблиц, которые создаются, но они сохраняют одну и ту же структуру/определение записи. Я хочу иметь разные таблицы, но их определение
record_info
- это то же самое.
Где-то в документах я читал, что это очень возможно. Я бегу:
Erlang otp R15B, mnesia-4.6 , windows 7 enterprise, 32-bit operating system, Dell laptop, intel core i5, 4GB RAM
Все остальные проекты erlang, над которыми я работаю, в порядке, у них нет никакого странного/неожиданного поведения, подобного этому.
Любые предложения?
+1 проголосовало! это фантастично. Спасибо @Isac –