2011-04-12 3 views
2

스키마에없는 테이블과 아직로드되지 않은 테이블의 차이점을 어떻게 알 수 있습니까?mnesia 테이블이 존재하지 않고 테이블이로드되지 않았습니다.

현재 mnesia를 사용하고 있습니다 : wait_for_tables()는 테이블을 검색하는 데 비교적 많은 시간 초과가 있지만 느슨한 것이고 (실제로 테이블을 시작하는 데 시간이 오래 걸리는 경우) 시간이 많이 소요됩니다 (테이블이 실제로 거기 없다).

답변

1

어쩌면 시도 ...

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

그것은 단지 추측이지만, 또 다른 사람은 확실한 대답이없는 경우는 실험의 기초가 될 수있다.

+0

이것은 나를 위해 작동하는 것 같습니다. 나의 유일한 장래의 우려는 스키마 테이블이이 시점에서로드되지 않을 수도 있다는 것입니다. 따라서이 위험에 대처하기 위해 table_info()를 호출하기 전에 mnesia : wait_for_tables ([schema], 2000)를 추가했습니다. 나는 이제 만족한다. – goertzenator

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

+0

댓글을 달았습니다. 나는 테이블이 어딘가에 존재하는 경우만을 고려한다. 사례 테이블을 포함하여 어디에도 존재하지 않는다 : catch와 함께 mnesia : table_info를 사용하십시오. – shino

관련 문제