凤凰城 - 改变列顺序

时间:2018-03-06 23:45:30

标签: elixir phoenix-framework ecto

因此,我正在创建一个ecto迁移,用于在数据库中向我的模型添加新列,并且我想更改列的顺序,因为这个新列放在列的末尾,所以我试过这样的话:

def change do
  alter table(:users) do
    add :password_hash, :string, after: :email
  end
end

但它似乎没有效果,也没有引发错误。

PD:我使用的是Maria DB。

2 个答案:

答案 0 :(得分:1)

我绝对不会建议在家里或学校这样做:),我也不确定它是否有效,但它应该。如果没有,请告诉我,我会删除答案;为格式化而不是发表评论。

def change do
  query = "ALTER TABLE users
           ADD COLUMN password_hash VARCHAR(255)
           AFTER email;"
  Ecto.Adapters.SQL.query!(Repo, query, [])
end

它使用Ecto.Adapters.SQL.query/4来执行原始SQL。

NB 请在下面查看@PatrickOscity非常有价值的评论。

答案 1 :(得分:0)

由于您没有编写您正在使用的数据库,我假设PostgreSQL不支持列重新排序。有一些hacky变通办法,当然没有在ecto中实现。

通常没有理由或需要改变列顺序。你为什么需要它?