我目前有以下数据库架构:

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/

10-16 04:14