我试图为Rails 5.0.2中的现有列编写一个迁移:
def up
change_column(:sales_deals, :lost_reason, 'jsonb USING CAST(lost_reason AS jsonb)')
end
def down
change_column(:sales_deals, :lost_reason, 'string USING CAST(lost_reason AS string)')
end
但是,未能CAST
现有字符串到JSONB:
PG::InvalidTextRepresentation: ERROR: invalid input syntax for type json
DETAIL: Token "Non" is invalid.
CONTEXT: JSON data, line 1: Non...
: ALTER TABLE "sales_deals" ALTER COLUMN "lost_reason" TYPE jsonb USING CAST(lost_reason AS jsonb)
我的猜测是有两个问题:
1)我需要指定该值的类型,因为令牌" non"是带有连字符的字符串的开始,"非交换"。
2)我需要定义一个默认键,因为现有值。
有人可以帮忙吗?谢谢!
您应该尝试以下尝试:
def up
change_column :sales_deals, :lost_reason, :jsonb, using: 'CAST(value AS JSON)'
end
def down
change_column :sales_deals, :lost_reason, :text
end
就是这样。