将迁移类型从日期更改为整数

时间:2017-10-06 10:28:38

标签: ruby-on-rails

如何将日期类型的迁移更改为整数? 我查看官方的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列为整数类型,而不是日期。

3 个答案:

答案 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,如果你使用的是第三方数据库,请让他们更新。

但是对于早期的案例,您可以通过迁移来使用删除和创建表或列的方式来实现结果。

希望解释!