Bur*_*men 6 postgresql datetime ruby-on-rails
我在数据库表中有几个日期字段,但是它们首先作为字符串启动,而不是日期时间。因此,我想通过迁移将这些值类型更改为日期类型,
class ChangeDateColumnsToDateTime < ActiveRecord::Migration
def change
change_column :users, :flight_date_departure, :datetime
change_column :users, :flight_date, :datetime
change_column :users, :appointment_date, :datetime
end
end
Run Code Online (Sandbox Code Playgroud)
但是它不能将旧的字符串值转换为当前存在于数据库中的日期时间,说 PG::DatatypeMismatch: ERROR: column "flight_date_departure" 不能自动转换为没有时区的类型时间戳。提示:您可能需要指定“USING flight_date_departure::timestamp without time zone”。我们在 SQLite 数据库中做到了没有问题,但是 PostgreSQL 存在这个问题。如何修改我的迁移,以便我不会丢失旧值并将它们正确转换为日期时间?
我试过下面的方法,它就像一个魅力:
change_column :table_name, :column_name, 'timestamp USING CAST(column_name AS timestamp)'
Run Code Online (Sandbox Code Playgroud)
小智 6
试试这样:
change_column :table_name, :column_name, 'datetime USING CAST(column_name AS datetime)'
Run Code Online (Sandbox Code Playgroud)