我目前有以下数据库架构:
create_table :user_actions do |t|
t.integer :emitter_id
t.string :emitter_type
t.integer :target_id
t.string :target_type
t.json :payload
t.timestamps
end
我想将
payload
字段从 json
迁移到 hstore
。执行以下操作:
change_column :user_actions, :payload, :hstore
导致以下错误消息:
PG::DatatypeMismatch: ERROR: column "payload" cannot be cast automatically to type hstore
HINT: Specify a USING expression to perform the conversion.
不确定如何使用
USING
提示以及在不丢失任何数据的情况下进行此迁移的最佳方法是什么? 最佳答案
提示: 指定一个 USING 表达式来执行转换
其实格式是:
change_column :user_actions, :payload, '[type_to_which_you_want_to_change] USING CAST(data AS [type_to_which_you_want_to_change])'
所以在你的情况下:
change_column :user_actions, :payload, 'hstore USING CAST(payload AS hstore)'
引用:
https://stackoverflow.com/a/25032193/1222852
关于postgresql - 将 JSON 列类型迁移到 HSTORE 列类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24259531/