Elixir insert_all不会使用EXTO 2.0创建自动生成的inserted_at

Elixir insert_all不会使用EXTO 2.0创建自动生成的inserted_at,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,安装的EXTO版本是“2.0.0-rc.5” 从文档中可以看出,在处插入的似乎是自动生成的。我应该手动完成这部分吗 iex(1)> categories = [%{name: "stackoverflow", url: "stackoverflow.com"}] iex(2)> App.Repo.insert_all App.Category, categories ** (Postgrex.Error) ERROR (not_null_violation): null valu

安装的EXTO版本是
“2.0.0-rc.5”

从文档中可以看出,在处插入的
似乎是自动生成的。我应该手动完成这部分吗

iex(1)> categories = [%{name: "stackoverflow", url: "stackoverflow.com"}]

iex(2)> App.Repo.insert_all App.Category, categories

** (Postgrex.Error) ERROR (not_null_violation): null value in column "inserted_at" violates not-null constraint

    table: categories
    column: inserted_at

Failing row contains (1, stackoverflow, stackoverflow.com, null, null).
    (ecto) lib/ecto/adapters/sql.ex:176: Ecto.Adapters.SQL.query!/5
    (ecto) lib/ecto/adapters/sql.ex:350: Ecto.Adapters.SQL.insert_all/8
    (ecto) lib/ecto/repo/schema.ex:42: Ecto.Repo.Schema.do_insert_all/6
iex(2)> 
该函数在
列定义插入的
和在
列定义更新的
。迁移中有一个同名函数

您可以使用以下命令在数据库级别进行设置:

schema "categories" do
 field :name, :string
 field :url, :string

 timestamps
end
也可以在地图中设置:

alter table(:categories) do
  modify :inserted_at, :utc_datetime, default: fragment("NOW()")
end
无论您选择哪种解决方案,您都可能需要对位于
updated\u执行相同的操作

如果不想跟踪时间戳,则可以从架构中删除
时间戳
,并在迁移中删除列(或者如果尚未将迁移提交到版本控制,则只需删除
时间戳
函数即可)

时间戳,在使用
全部插入/3
时不会自动生成。这 是通过设计实现的,因为此功能旨在更直接地插入 无需使用
insert/2
即可将数据导入数据库


非常感谢。在
处更新的
出现错误。使用上面建议的方法修复了此问题。迁移中的:datetime类型已被弃用,请改用:utc\u datetime或:naive\u datetime
alter table(:categories) do
  modify :inserted_at, :utc_datetime, default: fragment("NOW()")
end
categories = [%{name: "stackoverflow", url: "stackoverflow.com", inserted_at: Ecto.DateTime.utc}]