如何将铁轨中的column从字符串更改为jsonb



我试图为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

就是这样。

最新更新