Ecto迁移:删除引用,保留字段

时间:2018-02-21 09:02:04

标签: postgresql elixir ecto

在之前的迁移中,我定义了:

create table(:my_table) do
  add :reference_id, references(:references), null: false
  (...)
end

现在我想删除引用和null: false,但仍保留reference_id字段。

所以我想要这样的东西:

alter table(:my_table) do
  modify :reference_id, <SOME_TYPE>, null: true
end

我的数据库是Postgres,所以我认为应该是:bigint。

我有两个问题: - 以上是否正确? - 如果我理解正确,则无法直接回滚此迁移,因此我必须创建updown函数。如果该代码位于我的迁移的up中,那么down应包含哪些内容?

1 个答案:

答案 0 :(得分:0)

bigint看起来对我不对。默认情况下,PostgreSQL中的id字段被Ecto定义为bigint类型。

modify使用与add相同的参数,因此您的代码将为:

modify :reference_id, :bigint, null: true

并且将是:

modify :reference_id, references(:references), null: false

编辑:

使用外键约束,除非你像up这样删除外键约束,否则down将不起作用:

drop constraint(:my_table, "my_table_reference_id_fkey")