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 的非常有价值的评论。
所以,我正在创建一个 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 的非常有价值的评论。