2011-04-12 22 views
2

如何判断模式中没有的表与尚未加载的表之间的区别?mnesia表不存在vs表未加载

我目前使用mnesia:wait_for_tables()与一个相对较大的超时检测表,但这是松散的(如果表实际需要很长时间才能开始)和耗时(如果表是真的不在那里)。

回答

1

也许尝试...

lists:member(table_name, mnesia:table_info(schema, tables)). 

这只是一种猜测,但它可能是一个实验的基础上,如果没有其他人有一个明确的答案。

+0

这似乎适用于我。我唯一遗留的担心是,此时可能不会加载模式表,所以为了对抗这种风险,我在调用table_info()之前添加了mnesia:wait_for_tables([schema],2000)。我现在很满意。 – goertzenator 2011-05-10 15:11:58

0

mnesia:table_info/2可能会有帮助。

  1. 如果你事先知道表名和你想知道哪个节点有数据,

    mnesia:table_info(TableName, StorageType). 
    

    StorageType应该是

    ram_copies, disc_copies or disc_only_copies. 
    
  2. 一个或者,如果你想要知道本地节点有表副本,只需要

    mnesia:table_info(TableName, storage_type). 
    

    如果本地节点没有副本,则返回“未知”。

+0

如果该表完全不在模式中,table_info()将引发一个退出异常而不是“未知”。 – goertzenator 2011-05-10 15:14:50

+0

Thakns发表评论。我只考虑表格存在的情况。包括案例表不存在任何地方,使用mnesia:table_info和catch。 – shino 2011-05-17 04:57:09