Phoenix - 改变列顺序

Phoenix - Alter columns order

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

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

但是好像没有效果也不报错

PD:我正在使用 Maria DB。

由于您没有写明您使用的是哪个数据库,我假设是 PostgreSQL,它不支持列重新排序。有一些 hacky 解决方法,当然在 ecto 中没有实现。

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

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

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。


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