Pregunta
Definí un registro llamado log
.Quiero crear una tabla mnesia con nombre. log_table
.Cuando intento escribir un registro en la tabla, obtengo bad_type
error de la siguiente manera:
(node1@kitt)4> mnesia:create_table(log_table, [{ram_copies, [node()]},
{attributes, record_info(fields, log)}]).
{atomic,ok}
(node1@kitt)5> mnesia:dirty_write(log_table, #log{id="hebelek"}).
** exception exit: {aborted,{bad_type,#log{id = "hebelek"}}}
in function mnesia:abort/1
¿Qué me estoy perdiendo?
Solución
De forma predeterminada, se supone que el nombre del registro es el mismo que el nombre de la tabla.
Para solucionar este problema, debes nombrar tu tabla simplemente log
o agregar la opción {record_name, log}
en las opciones de su tabla (como lo hizo en su solución).
Generalmente es una buena práctica dejar que el registro y la tabla tengan el mismo nombre, ya que hace que el código sea más fácil de leer y depurar.Luego también puedes usar el mnesia:write/1
funciona con solo su registro como único argumento.Luego, Mnesia determina en qué tabla colocar el registro mirando el nombre.
Otros consejos
Lo encontré.cuando cambié mnesia:create_table
llama a esto
mnesia:create_table(log_table, [{ram_copies, [node()]},
{record_name, log},
{attributes, record_info(fields, log)}]).
todo funciona bien.
¿Cómo se ve su definición de los registros de registro?¿Recibe el mismo error si crea una nueva tabla desde cero (es decir,elimine primero el directorio Mnesia@).