1

私のルビーコード:

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 gemを使用して、モデルコードで次のようにします。

serialize :data, ActiveRecord::Coders::Hstore

助けていただければ幸いです!

4

1 に答える 1

3

Rails が使用しているデータベースに hstore 拡張機能をインストールしていません。

たとえば、select 'a' => 'b'hstore を持たないデータベースの 1 つで言うと、次のようになります。

=> 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 hstoreRails データベースでa を実行する必要があります。

于 2012-08-15T00:39:52.597 に答える