elixir - 如何使用Ecto的时间戳将时间戳添加到现有表中?

标签 elixir ecto

由于inserted_atupdated_at不能是null,因此无法使用:

def change do
  alter table(:channels) do
    timestamps
  end
end
** (Postgrex.Error) ERROR (not_null_violation): column "inserted_at" contains null values
有没有一种简单的方法可以在不复制timestamps'功能的情况下完成此任务?

最佳答案

timestamps/1函数接受选项关键字列表,您可以使用它来设置默认值。

def change do
  alter table(:channels) do
    timestamps default: "2016-01-01 00:00:01", null: false
  end
end

更新Ecto> = 2.1
您需要使用新的NaiveDateTime类型
def change do
  alter table(:channels) do
    timestamps default: ~N[2017-01-01 00:00:01], null: false
  end
end

如果您有更多疑问,请看看documentation

关于elixir - 如何使用Ecto的时间戳将时间戳添加到现有表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35744390/

相关文章:

pattern-matching - 模式匹配中 byte_size 的语法是什么?

elixir - with..do..else 语句中出现奇怪的语法错误

elixir - 在单个事务中插入多个变更集

elixir - 如何正确清理 Phoenix 的用户输入服务器端

compiler-errors - 警告 : Ecto. Repo.insert_all/3 未定义或私有(private)

postgresql - PostGIS - 路线匹配解决方案

websocket - 我如何知道 Phoenix channel 的连接数量?

environment-variables - Distillery 不替换环境变量

elixir - Graphql Absinthe Elixir 基于权限的可访问字段

elixir - 如何在Phoenix框架中处理关联和嵌套形式?