Erlang 如何检测mnesia模式和表是否已在代码中创建?

Erlang 如何检测mnesia模式和表是否已在代码中创建?,erlang,mnesia,Erlang,Mnesia,我想在系统启动后在代码中创建一个mnesia模式和表,因此我需要检测mnesia模式和表是否已经创建。如果没有,我想创建它们。这是个好主意吗?如何检测记忆模式和表格?一种处理方法是- 尝试使用mnesia:create_table(table_name,…) 如果表已经存在(1),则返回{aborted, {已经存在,表名} 若表并没有退出,它将被创建,并且{atomic,ok}将被删除 如果成功返回 如果(3)中的表创建有任何错误,{中止,原因} 将被退回 根据需要处理每个返回值。签出,然后

我想在系统启动后在代码中创建一个mnesia模式和表,因此我需要检测mnesia模式和表是否已经创建。如果没有,我想创建它们。这是个好主意吗?如何检测记忆模式和表格?

一种处理方法是-

  • 尝试使用
    mnesia:create_table(table_name,…)

  • 如果表已经存在(1),则返回
    {aborted,
    {已经存在,表名}

  • 若表并没有退出,它将被创建,并且
    {atomic,ok}
    将被删除 如果成功返回

  • 如果(3)中的表创建有任何错误,
    {中止,原因}
    将被退回


  • 根据需要处理每个返回值。

    签出,然后

    即使在shell中调用:
    mnesia:info()。
    也会响应许多有用的东西。我对这些答案不满意,我希望有更直接的方法来实现这一点。调用mnesia:scheme()似乎是最干净的方法,它只是第一次出现错误。您可以捕获错误并创建模式和表。但是,在其他所有时间,它都成功运行并记录信息,而不是返回信息,这看起来很草率。在创建表之前,您需要创建模式,因此我不知道该解决方案是如何工作的。您需要捕获在创建模式以及调用
    application:start(mnesia)
    时抛出的错误。