2011-04-12 51 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