Elixir,Ecto仅回滚时间戳

时间:2018-11-05 21:58:26

标签: elixir phoenix-framework ecto

在创建的表之一中,我必须在创建表后添加时间戳。我当前的迁移脚本看起来像

defmodule Database.Repo.Migrations.UpdateSubscriptionTableInsertedAt do
  use Ecto.Migration
   def up do
    alter table(:subscriptions) do
      timestamps()
    end
  end
  def down do
    alter table(:subscriptions) do
      timestamps()
    end
  end
end

这对于迁移工作正常,但在尝试回滚时抛出错误

[info] == Running Database.Repo.Migrations.UpdateSubscriptionTableInsertedAt.down/0 forward
[info] alter table subscriptions
** (Postgrex.Error) ERROR 42701 (duplicate_column): column "inserted_at" of relation "subscriptions" already exists

任何想法我该如何解决?

1 个答案:

答案 0 :(得分:2)

您要告诉它对向上和向下执行相同的操作。在这种情况下,您实际上可以只指定一个回调,如下所示。

def change do
  alter table(:subscriptions) do
    timestamps()
  end
end

这在迁移时将做正确的事情,但在回滚时也会删除字段。如果您确实要保留up/0down/0回调,则需要手动删除字段。

def down do
  alter table(:subscriptions) do
    remove :inserted_at
    remove :updated_at
  end
end