【问题标题】:Rails migration - change column type from float to jsonb in railsRails 迁移 - 在 rails 中将列类型从 float 更改为 jsonb
【发布时间】:2020-07-17 14:21:44
【问题描述】:

我正在尝试将列类型从 float 转换为 rails 中的 jsonb。但它给出了这个错误。

 Caused by:
ActiveRecord::StatementInvalid: PG::CannotCoerce: ERROR:  cannot cast type double precision to json
LINE 1: ...es" ALTER COLUMN "quote_amounts" TYPE jsonb USING CAST(quote...
                                                             ^
: ALTER TABLE "vendor_quotes" ALTER COLUMN "quote_amounts" TYPE jsonb USING CAST(quote_amounts AS jsonb)

我已使用此迁移更改列类型

def change
    change_column :vendor_quotes, :quote_amounts, 'jsonb USING CAST(quote_amounts AS jsonb)'
  end

我尝试了其他语法,但仍然出现相同的错误。

【问题讨论】:

    标签: ruby-on-rails jsonb rails-migrations


    【解决方案1】:

    没有从double precisionjsonb 的默认转换(如您所见)。不过有to_jsonb function

    to_jsonb(anyelement)
    jsonjsonb 形式返回值。数组和组合被(递归地)转换为数组和对象;否则,如果存在从类型到json 的强制转换,则将使用强制转换函数执行转换;否则,将产生一个标量值。对于除数字、布尔值或空值以外的任何标量类型,都将使用文本表示形式,使其成为有效的jsonjsonb 值。

    所以你应该可以说:

    change_column :vendor_quotes, :quote_amounts, 'jsonb using to_jsonb(quote_amounts)'
    

    change_column :vendor_quotes, :quote_amounts, :jsonb, using: 'to_jsonb(quote_amounts)'
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2012-01-20
      • 1970-01-01
      • 2016-09-28
      • 2016-10-25
      • 1970-01-01
      • 2015-04-04
      • 2011-02-17
      • 2021-11-30
      相关资源
      最近更新 更多