【发布时间】:2013-12-29 00:45:46
【问题描述】:
我正在尝试使用 vanilla Rails 迁移将 daterange 类型的列更改为 tsrange(我意识到我需要时间和日期)
def self.up
change_column :events, :when, :tsrange
end
运行rake db:migrate后报错
PG::DatatypeMismatch: ERROR: column "when" cannot be cast automatically to type tsrange
HINT: Specify a USING expression to perform the conversion.
: ALTER TABLE "events" ALTER COLUMN "when" TYPE tsrange
我尝试按照提示并使用以下内容
def self.up
change_column :events, :when, :tsrange, 'tsrange USING CAST(when AS tsrange)'
end
后来得到了
no implicit conversion of Symbol into Integer
据我所知,USING CAST 主要用于整数。假设我不想删除然后重新创建列,您必须指定什么才能将类型从 daterange 更改为 tsrange?
我正在使用
- Rails 4.0.1
- ruby-2.0.0-p247
- psql (9.2.4)
在以下 PR:https://github.com/rails/rails/pull/7345 中向 Rails 4 介绍了一些背景、日期范围和 tsrange。谢谢。
【问题讨论】:
标签: postgresql activerecord ruby-on-rails-4 range postgresql-9.2