mnesia:create_schema()各アプリケーションの起動時に呼び出すことの副作用はありますか?
私が読み続けていることから、この関数はデータベース インスタンスごとに 1 回だけ呼び出す必要があります。既存のデータベースで複数回呼び出すことは大きな問題ですか?
副作用はありませんが、後で呼び出すと {error, {Node,{already_exists,Node}}} になります。次のようなものを使用できます
ensure_schema() ->
Node = node(),
case mnesia:create_schema([Node]) of
ok -> ok;
{error, {Node, {already_exists, Node}}} -> ok;
Error -> Error
end.
以前に開発中にこれを行ったことがありますが、既に存在するテーブルに警告を吐き出します。ただし、私が気付いていない副作用が発生する可能性があるため、本番環境で再実行することはしません。また、現在発生していなくても、将来のリリースで発生しないという保証はありません。 .
なぜ何度も実行したいのですか?
2 回目の呼び出しで例外がスローされる可能性があります。キャッチするだけです。