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



如何将从日期类型到整数的迁移更改为整数?我在Rails官方网站上查找了一下,他们说我应该写change_column。

我试过这个:

def change
  change_column :books, :publish_year, :integer
end

但这给了我一个错误:

PG::D atatype不匹配:错误:列"publish_year"不能自动转换为整数类型 提示:您可能需要指定"USING publish_year::integer"。 :更改表"书籍" 更改列"publish_year"类型整数

我希望我的书publish_year列是整数类型而不是日期。

试试这个兄弟,

change_column :table_name, :column_name, 'integer USING CAST(column_name AS integer)'

希望这有帮助。 :)

Do remove_column :books, :publish_year然后做add_column :books, :publish_year, :integer.

您可以在一次迁移中同时执行这两种操作,但我通常会在不同的迁移中执行每种方法,这使我更容易回滚!

主要原因是 PgSQL 公共 API 和它们允许的方法,具体取决于版本。

PostgreSQL中没有这样的操作,比如版本7.4来更新列数据类型。如果您阅读操作列表,则可以在链接中看到允许的操作。

现在,在后来的PgSQL中,例如版本9.2,他们添加了该操作。

他们在 8.0 版中添加了它

因此,根据 PgSQL 的版本,您可能会收到错误或它可能有效。我建议你更新你的PgSQL,如果你使用的是第三方数据库,请他们更新它。

但是对于早期的情况,您可以使用通过迁移删除和创建表或列的方式来获得结果。

希望能解释!

最新更新