如何将日期类型的迁移更改为整数? 我查看官方的Rails网站,他们说我应该写一下change_column。
我试过了:
def change
change_column :books, :publish_year, :integer
end
但这给了我错误:
PG :: DatatypeMismatch:错误:列“publish_year”无法自动转换为整数类型 提示:您可能需要指定“USING publish_year :: integer”。 :ALTER TABLE“books”ALTER COLUMN“publish_year”TYPE integer
我希望我的书籍publish_year列为整数类型,而不是日期。
答案 0 :(得分:3)
试试这个兄弟,
change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'
希望这会有所帮助。 :)
答案 1 :(得分:2)
remove_column :books, :publish_year
然后做add_column :books, :publish_year, :integer
。
您可以在一次迁移中同时执行这两项操作,但我们通常会在不同的迁移中执行每种方法,这样我就可以更轻松地回滚了!
答案 2 :(得分:1)
主要原因是它们允许的PgSQL公共API和方法取决于版本。
PostgreSQL中没有这样的操作说version 7.4来更新列数据类型。如果您阅读操作列表,则可以在链接中看到允许的操作。
现在,在后来的PgSQL中,例如version 9.2,他们添加了这个操作。
他们在8.0版中添加了它
因此,根据PgSQL的版本,您可能会收到错误或者它可能有效。我建议你更新你的PgSQL,如果你使用的是第三方数据库,请让他们更新。
但是对于早期的案例,您可以通过迁移来使用删除和创建表或列的方式来实现结果。
希望解释!