mnesia initialization

I Gusti Ngurah Oka Prinarjaya okaprinarjaya@REDACTED
Fri Nov 8 06:45:59 CET 2019


Hi,

Make sure to:

1. Start your erlang node with -mnesia dir
"/path/to/where/you/want/to/put/mnesia"
2. Create the schema first
3. start mnesia by using command mnesia:start()
4. The create your tables

>> I have a db_init function that initializes db so that if tables do not
exist they are created (ram with disc_copies)
If you want to do a table existence detection, you can do like the
following:

case catch mnesia:table(your_table_name, version) of
  {{_, _}, []}
    -> table_exists;

  Fail when Fail =:=
{'EXIT',{aborted,{no_exists,your_table_name,version}}}; Fail =:=
{aborted,{no_exists,your_table_name,version}}
    -> %% create your your_table_name table
end

Also, as i stated above, you have to create your schema first then start
mnesia application. Example:

case mnesia:create_schema([node()]) of
  {error,{_,{already_exists,_}}} ->
      io:format("Schema Already exists~n");

    ok ->
      io:format("Schema Created~n")
end,

application:ensure_started(mnesia),

%% then init your tables here
%%
%%
.

Please read http://erlang.org/doc/apps/mnesia/Mnesia_chap2.html

>> However half of the time it destroys old table returning {atomic, ok}
and another half it returns with already_exists
I'm not sure with this. But maybe i think your schema location was not
consistent

I suggest you to use rebar3 to manage your project.














Pada tanggal Jum, 8 Nov 2019 pukul 07.57 Karlo Kuna <kuna.prime@REDACTED>
menulis:

> Hi,
>
> I have problem with mnesia initialization,
>
> I have a db_init function that initializes db so that if tables do not
> exist they are created (ram with disc_copies). For example:
>
> db_init() ->
>     mnesia:create_table(some_record,[{attributes, record_info(fields,
> some_record)},
>                                                                 {type,
> bag}, {disc_copies, [node()]}]).
>
> I'm running this function on the app start to make sure the table exists
> and is ready.
> However half of the time it destroys old table returning {atomic, ok} and
> another half it returns with already_exists. Also, this happens in the
> regular fashion, if I have n starts of application, even starts would
> destroy data and even wold keeps old data. I know that I am missing
> something probably obvious here but if anyone has any insights on why is
> this happening and how to fix it I would greatly appreciate it.
>
> Thank You,
> Karlo.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20191108/fa8b4a33/attachment.htm>


More information about the erlang-questions mailing list