2012-08-14 3 views
1

내 루비 코드 :포스트 그레스 HStore 오류 - 알 수없는 운영자

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

이 오류와 함께 온다 :

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

는 다음과 같은 SQL 생성

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 

도움을 받으실 수 있습니다.

+0

나는 => 무엇을 의미하는지 모르겠다.> = (보다 크거나 같음)? – Jim

+1

@Jim : http://www.postgresql.org/docs/current/static/hstore.html –

+0

아, 감사합니다. 전에는 보지 못했습니다. – Jim

답변

3

레일스가 사용하는 데이터베이스에 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가 설치되어 않습니다 : 나는 hstore이없는 내 데이터베이스 중 하나에 select 'a' => 'b'을 말한다면 예를 들어

, 나는이 얻을

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

레일 데이터베이스에서 create extension hstore을 수행해야합니다.

+0

확인해 주셔서 감사합니다. 나는 원래 이것을 고려한 다음 확장 기능을 설치 했으므로 그럴 수 없다고 결정했습니다. 그러나 당신의 메모는 방금 데이터베이스를 가져 왔을 때 게으르며 덤프로부터 다시 생성했다고 기억하게했습니다. 그게 문제가되어야합니다 .... 나는 지금 이것이 문제라는 것을 확실히 알기 때문에 확인하기 전에 받아 들일 것입니다! 고마워! – Brandon

+0

@Brandon : 이것에 대한 검사를 테스트 스위트에 추가하는 것이 합리적 일 수 있습니다. 'it'는 "create hstore"를 데이터베이스 'do ...'에서 수행해야합니다. –

+0

Rails 3.2.13과 psql (PostgreSQL) 9.2.4에서 같은 문제가 있습니다. 그러나, 나는'create hstore'을 작성했습니다. 도움? – CDub