2013-04-29 1 views
7

hstore 속성으로 쿼리 결과를 정렬하려면 어떻게해야합니까?레일 4의 hstore 속성으로 결과를 정렬하려면 어떻게해야합니까?

@items = Item.includes(:product).order('products.properties @> hstore("platform")') 

PG::Error: ERROR: column "platform" does not exist 
LINE 1: ...oduct_id" ORDER BY products.properties @> hstore("platform"... 

platform가 hstore 타입 속성 컬럼에 저장된 hstore 키 원인이다.

답변

17

큰 따옴표는 PostgreSQL (및 표준을 따르는 다른 데이터베이스)의 식별자 (예 : 테이블 및 열 이름)를 인용하는 데 사용됩니다. 그래서 당신은 말할 때 :

hstore("platform") 

의 PostgreSQL가 인용 된 열 이름으로 "platform"을보고 더 platform 열이 없기 때문에, 당신이 오류가 발생합니다. 여기 @>를 사용하여 않습니다

이 아마 아직도하지만 실패합니다
.order("products.properties @> hstore('platform')") 

, hstore('platform') 훨씬 이해가되지 않으며, 어느 쪽도;

표준 SQL에서

문자열은 작은 따옴표로 인용 , 당신은 말하고 싶지 a @> b

가 hstore a가 hstore 포함되어 있습니까 의미 b 당신은 당신이 조회하는 ->를 사용하고자하려는 properties hstore의 'platform' 키의 값을 정렬하려는 경우

'platform' 키는 다음과 같습니다.

.order("products.properties -> 'platform'")