I have tried this
%Device{}
|> Device.changeset(attrs)
|> Repo.insert(
on_conflict: {:replace_all_except, [:id, :inserted_at]},
conflict_target: [:device_id]
)
But inserted_at is still being updated. I looked into Ecto code and saw this
defp load_changes(changeset, state, types, values, embeds, autogen, adapter, schema_meta) do
%{data: data, changes: changes} = changeset
IO.puts("load_changes #{inspect(autogen)}")
data =
data
|> merge_changes(changes)
|> Map.merge(embeds)
|> merge_autogen(autogen)
|> apply_metadata(state, schema_meta)
|> load_each(values, types, adapter)
IO.puts("load_changes #{inspect(data)}")
Map.put(changeset, :data, data)
end
It seems at the end of the day merge_autogen
will still populate inserted_at
and updated_at
Am I doing this wrong?