如何在Rails + Postgres中重命名hstore密钥

时间:2016-05-06 14:49:15

标签: sql ruby-on-rails ruby postgresql hstore

如何使用Postgres在Rails 4中重命名hstore键?

User.update_all('hstorename -> oldcolumname: newcolumnname') ???

1 个答案:

答案 0 :(得分:3)

基于https://stackoverflow.com/a/13276545/305019

  def change_hstore_key(klass, h, from_key, to_key)
    klass.where("#{h} ? '#{from_key}'")
         .update_all("#{h} = (#{h} - '#{from_key}'::text) || " \
                     "hstore('#{to_key}'::text, #{h} -> '#{from_key}')")
  end

  # usage
  change_hstore_key(User, hstorename, oldcolumnname, newcolumnname)

重要:不要将此与任何用户提供的参数一起使用以避免SQL注入。对于您提供所有数据的迁移等,这应该可以解决问题。