postgresql 9.3 사용자입니다.
테이블이 아래의 그림처럼 되어 있습니다. 303이 들어 있는것을 검색하려면 어찌해야할까요
9.4 이상이라면, 그냥 jsonb 형으로 바꾸고, @> 연산자로 비교하면 아주 직관적으로 이 문제를 풀 수 있는데,
select * from t where (gitfs->0)::jsonb @> to_jsonb(303)
9.3에서 이문제를 풀려면, json_array_elements() 함수로 로우로 만들고, 그것을 비교해야 합니다. select t.* from t, json_array_elemnts(t.gifts->0) as a where a.value::text::int = 303
이런 형태가 될 것 같네요.
9.3 에서는 이 작업 시 저 json 자료가 비정형으로 자료량이 많은 경우 성능을 크게 떨어뜨립니다. 최신 버전으로 옮기고, jsonb 자료형을 사용하고, 그 자료에 인덱스를 만들어 조회하는 것이 합리적일 것입니다.
답변 감사합니다.