我一直在努力将Postgres数据库中的列类型从text更改为json。这是我尝试过的......
class ChangeNotesTypeInPlaces < ActiveRecord::Migration[5.0]
def up
execute 'ALTER TABLE places ALTER COLUMN notes TYPE json USING (notes::json)'
end
def down
execute 'ALTER TABLE places ALTER COLUMN notes TYPE text USING (notes::text)'
end
end
也...
class ChangeNotesTypeInPlaces < ActiveRecord::Migration[5.0]
def up
change_column :places, :notes, 'json USING CAST(notes AS json)'
end
def down
change_column :places, :notes, 'text USING CAST(notes AS text)'
end
end
这两个都返回相同的错误......
PG::InvalidTextRepresentation: ERROR: invalid input syntax for type json
答案 0 :(得分:6)
使用Rails 5.1.x和PostgreSQL 9.4,在将文本列(包含有效的json)转换为jsonb列时,这对我有用:
class ChangeTextColumnsToJson < ActiveRecord::Migration[5.1]
def change
change_column :table_name, :column_name, :jsonb, using: 'column_name::text::jsonb'
end
end
答案 1 :(得分:1)
我能够使用以下方式完成它:
def change
change_column :places, :notes, :json, using: 'notes::JSON'
end
但这不可逆转;我想你可以将它分成单独的上下定义,但我觉得不需要。
答案 2 :(得分:0)
我刚解决了类似的问题。试图根据你的问题调整它,它看起来(主要是?)就像这样。
class ChangeNotesTypeInPlaces < ActiveRecord::Migration[5.0]
def up
change_column :places, :notes, :jsonb, using: 'CAST(value AS JSON)'
end
def down
change_column :places, :notes, :text
end
end