Elixir Repo.insert_all/2和唯一约束
我今天有一个相当有趣的问题。我正试图使用EXTO函数Elixir Repo.insert_all/2和唯一约束,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,我今天有一个相当有趣的问题。我正试图使用EXTO函数Repo.insert_all/2将CSV文件批量插入到我的数据库中。然而,有一件事困扰着我 在我的上下文中,问题在于以下代码: defmodule AppName.Roles do def bulk_insert(array_of_maps) do try do Repo.insert_all(Role, array_of_maps) rescue exception in Postgrex.Er
Repo.insert_all/2
将CSV文件批量插入到我的数据库中。然而,有一件事困扰着我
在我的上下文中,问题在于以下代码:
defmodule AppName.Roles do
def bulk_insert(array_of_maps) do
try do
Repo.insert_all(Role, array_of_maps)
rescue
exception in Postgrex.Error ->
_handle_exception(exception) # or whatever
end
end
end
但就目前而言,这似乎是一种黑客行为。因为我知道有一个内置的变更集机制,可以处理唯一的约束,但我不知道如何将系统的这一部分包含在Repo.insert_all/3
但是由于insert_all
函数不关心变更集,这使得这一点更加困难
(我当然是指唯一约束/2
)
我知道我可以:
- 使用
执行此操作,但这会在后端创建单独的查询,而不是将其作为一个大查询执行Multi
- 使用
块保存代码,但我想看看是否有更灵丹妙药的方法来解决这个问题,因为模式匹配的原理,让它崩溃try rescue
-它可能是:on_conflict
(默认值),:raise
,:nothing
,:replace_all
,:replace_all_,除了主键
,更新指令的关键字列表或更新查询李>{:replace,fields}
- 接受选项列表,其中一个选项是
:冲突\u目标
选项可能用于提供不安全的片段