Ошибки Postgres HStore - неизвестный оператор

Мой рубиновый код:

Portfolio.where("data @> (:key => :value)",     :key => 'CSJ', :value => '0.1')

Создает следующий SQL:

"SELECT \"portfolios\".* FROM \"portfolios\"  WHERE (data @> ('CSJ' => '0.1'))"

Приходит с этой ошибкой:

Error: PG::Error: ERROR:  operator does not exist: unknown => unknown
LINE 1: ...olios".* FROM "portfolios"  WHERE (data @> ('CSJ' => '0.1'))
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
: SELECT "portfolios".* FROM "portfolios"  WHERE (data @> ('CSJ' => '0.1'))

Postgresql 9.1.4, Rails 3.2.7 / 8, использующий гем activerecord-postgres-hstore со следующим в моей модели:

serialize :data, ActiveRecord::Coders::Hstore

Помощь будет оценена!

1 ответ

Решение

Вы не установили расширение hstore в базу данных, которую использует Rails.

Например, если я скажу select 'a' => 'b' в одной из моих баз данных, где нет hstore, я получаю это:

=> select 'a' => 'b';
ERROR:  operator does not exist: unknown => unknown
LINE 1: select 'a' => 'b';
                   ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

Но в другой базе данных, в которой установлен hstore, я получаю следующее:

=> select 'a' => 'b';
 ?column? 
----------
 "a"=>"b"
(1 row)

Вам нужно сделать create extension hstore в вашей базе данных Rails.

Другие вопросы по тегам