ruby-on-rails – Rails 3.1,Postgres 9.1.4,hstore未知运算符错误

我正在尝试将hstore数据列添加到现有的STI模型中.

类似于Postgres HStore Errors – Unknown Operator但据我所知,我已经安装了hstore扩展.我已经删除数据库并从迁移重建它而没有错误,但规格仍然失败.

Mac OS X 10.8.2
Rails 3.1.10
psql (Postgresql) 9.1.4

user.rb

has_many :targets

def complete_targets
  targets.where("data @> (:key => :value)",key: 'complete',value: 'true')
end

targets.rb

belongs_to :user
serialize :data,ActiveRecord::Coders::Hstore

setup_hstore迁移:

class SetupHstore < ActiveRecord::Migration
  def self.up
    execute "CREATE EXTENSION IF NOT EXISTS hstore"
  end

  def self.down
    execute "DROP EXTENSION IF EXISTS hstore"
  end
end

添加数据列迁移:

class AddDataToRecords < ActiveRecord::Migration
  def change
    add_column :records,:data,:hstore
  end
end

添加索引迁移:

class AddHstoreIndexes < ActiveRecord::Migration
  def up
    execute "CREATE INDEX records_gin_data ON records USING GIN(data)"
  end

  def down
    execute "DROP INDEX records_gin_data"
  end
end

错误

ActiveRecord::StatementInvalid:
PG::Error: ERROR:  operator does not exist: unkNown => unkNown
LINE 1: ...records"."user_id" = 244 AND (data @> ('complete' => 'true')...

尝试通过直接查询创建扩展时的Navicat输出

CREATE EXTENSION hstore Error : ERROR:  extension "hstore" already exists

解决方法

也许这是一个简单的数据类型问题,请尝试:

data @> ('complete'::text => 'true'::text)

但是=>运算符已弃用(并已在9.2中删除),最好使用hstore()格式:

(data @> hstore('complete','true'))

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...