새로운 PostgreSQL JSON 데이터 유형의 필드를 사용하여 쿼리하려면 어떻게합니까?
PostgreSQL 9.2의 새로운 JSON 함수에 대한 문서 및 / 또는 예제를 찾고 있습니다.
특히 일련의 JSON 레코드가 주어진 경우 :
[
{name: "Toby", occupation: "Software Engineer"},
{name: "Zaphod", occupation: "Galactic President"}
]
이름으로 레코드를 찾기 위해 SQL을 작성하는 방법은 무엇입니까?
바닐라 SQL에서 :
SELECT * from json_data WHERE "name" = "Toby"
공식 개발자 매뉴얼은 매우 드물다.
- http://www.postgresql.org/docs/devel/static/datatype-json.html
- http://www.postgresql.org/docs/devel/static/functions-json.html
업데이트 I
내가 조립 한 PostgreSQL을 9.2으로 현재 무엇이 가능한지 자세히 요점을 . 일부 사용자 정의 기능을 사용하면 다음과 같은 작업을 수행 할 수 있습니다.
SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';
업데이트 II
이제 JSON 함수를 자체 프로젝트로 옮겼습니다.
PostSQL -PostgreSQL 및 PL / v8을 완전히 멋진 JSON 문서 저장소로 변환하는 기능 세트
포스트그레스 9.2
pgsql-hackers 목록에서 Andrew Dunstan을 인용 합니다 .
어떤 단계에서는 (json-producing과 반대되는) json-processing 기능이있을 수 있지만 9.2에는 없습니다.
PLV8에서 문제를 해결 해야하는 구현 예제 를 제공하지 못하게하지는 않습니다 .
포스트그레스 9.3
"json-processing"을 추가 할 수있는 새로운 기능과 연산자를 제공합니다.
- 새로운 JSON 기능에 대한 매뉴얼.
- pg 9.3의 새로운 기능에 대한 Postgres Wiki .
- @Will은 아래 설명에서 새로운 운영자 를 시연 하는 블로그 링크를 게시했습니다 .
Postgres 9.3 의 원래 질문 에 대한 답변 :
SELECT *
FROM json_array_elements(
'[{"name": "Toby", "occupation": "Software Engineer"},
{"name": "Zaphod", "occupation": "Galactic President"} ]'
) AS elem
WHERE elem->>'name' = 'Toby';
고급 예 :
For bigger tables you may want to add an expression index to increase performance:
Postgres 9.4
Adds jsonb
(b for "binary", values are stored as native Postgres types) and yet more functionality for both types. In addition to expression indexes mentioned above, jsonb
also supports GIN, btree and hash indexes, GIN being the most potent of these.
- The manual on
json
andjsonb
data types and functions. - The Postgres Wiki on JSONB in pg 9.4
The manual goes as far as suggesting:
In general, most applications should prefer to store JSON data as
jsonb
, unless there are quite specialized needs, such as legacy assumptions about ordering of object keys.
Bold emphasis mine.
Performance benefits from general improvements to GIN indexes.
Postgres 9.5
Complete jsonb
functions and operators. Add more functions to manipulate jsonb
in place and for display.
With Postgres 9.3+, just use the ->
operator. For example,
SELECT data->'images'->'thumbnail'->'url' AS thumb FROM instagram;
see http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/ for some nice examples and a tutorial.
With postgres 9.3 use -> for object access. 4 example
seed.rb
se = SmartElement.new
se.data =
{
params:
[
{
type: 1,
code: 1,
value: 2012,
description: 'year of producction'
},
{
type: 1,
code: 2,
value: 30,
description: 'length'
}
]
}
se.save
rails c
SELECT data->'params'->0 as data FROM smart_elements;
returns
data
----------------------------------------------------------------------
{"type":1,"code":1,"value":2012,"description":"year of producction"}
(1 row)
You can continue nesting
SELECT data->'params'->0->'type' as data FROM smart_elements;
return
data
------
1
(1 row)
'IT story' 카테고리의 다른 글
엡실론을 사용하여 double을 0으로 비교 (0) | 2020.05.05 |
---|---|
'? :'의 반환 유형 (삼항 조건 연산자) (0) | 2020.05.05 |
파이썬에서 멀티 프로세싱을 사용하는 동안 어떻게 로그인해야합니까? (0) | 2020.05.05 |
ASP.NET MVC에서 요청 조절을 구현하는 가장 좋은 방법은 무엇입니까? (0) | 2020.05.05 |
속성 탐색기처럼 작동하는 GUI 기반 또는 웹 기반 JSON 편집기 (0) | 2020.05.05 |