Erlang:多次调用 mnesia:create_schema 会有副作用吗?

发布于 2024-08-13 05:11:43 字数 120 浏览 3 评论 0原文

在每个应用程序启动时调用 mnesia:create_schema() 是否有副作用?

根据我不断阅读的内容,每个数据库实例只应调用此函数一次。在现有数据库上多次调用它是一个大问题吗?

Is there a side effect to calling mnesia:create_schema() on each application start?

From what I keep reading, this function should only be called once per database instance. Is it a big issue to call it more than once on an existing database?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我的影子我的梦 2024-08-20 05:11:43

我之前在开发过程中已经这样做过,它会在已经存在的表上发出警告。但是,我不会在生产中重新运行它,因为它可能会产生一些我不知道的副作用,即使现在没有,也不能保证在未来的版本中不会有。 。

为什么要运行多次?

I've done this before in development and it spits out warnings on the tables that already exist. However I wouldn't make it a practice to rerun it in Production since it's possible that it may have some side-effects I'm unaware of and even if it doesn't now there is no guarantee that it won't in future releases.

Why do you want to run it multiple times?

狼亦尘 2024-08-20 05:11:43

它没有副作用,但稍后调用将导致 {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.

It has no side effect, but later calls will result in {error, {Node,{already_exists,Node}}}. You can use something like

ensure_schema() ->
  Node = node(),
  case mnesia:create_schema([Node]) of
    ok -> ok;
    {error, {Node, {already_exists, Node}}} -> ok;
    Error -> Error
  end.
葬シ愛 2024-08-20 05:11:43

那么它可能会在第二次调用时引发异常。抓住它吧。

Well it could throw an exception on the second call. Just catch it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文