Question
J'ai défini un enregistrement nommé log
. Je souhaite créer une table mnesia nommée log_table
. Lorsque j'essaie d'écrire un enregistrement dans la table, l'erreur bad_type
se présente comme suit:
(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'est-ce qui me manque?
La solution
Par défaut, le nom de l'enregistrement est supposé être le même que celui de la table.
Pour résoudre ce problème, vous devez nommer votre table uniquement log
ou ajouter l'option {nom_enregistrement, log}
dans les options de votre table (comme vous l'avez fait dans votre correctif). ).
Il est généralement judicieux de laisser le même nom à votre enregistrement et à votre table, cela facilite la lecture et le débogage du code. Vous pouvez également utiliser la fonction mnesia: write / 1
avec uniquement votre enregistrement comme argument. Mnesia détermine ensuite la table dans laquelle enregistrer le disque en regardant son nom.
Autres conseils
Je l'ai trouvé. Quand j'ai changé mnesia: create_table
appel à cette
mnesia:create_table(log_table, [{ram_copies, [node()]},
{record_name, log},
{attributes, record_info(fields, log)}]).
tout fonctionne bien.
À quoi ressemble votre définition des enregistrements de journaux? Obtenez-vous la même erreur si vous créez une nouvelle table à partir de zéro (c’est-à-dire supprimez d’abord le répertoire Mnesia @).