json 입력테스트의 정확한 사본 생성 <ㅡㅡ> 처리속도가 느림
jsonb 처리속도가 비교적 빠름 <ㅡㅡ> 데이터 저장속도가 비교적 느림
기능/특성 |
TEXT 타입 |
JSON/JSONB 타입 |
데이터 저장 |
문자열 그대로 저장 |
JSON 형식 유지 (JSONB: 바이너리) |
구조적 무결성 |
보장되지 않음 |
JSON 문법 검증이 필요 |
검색 및 접근 |
문자열 연산(일치, 패턴 검색) |
키-값 기반 접근, 내부 필드 검색 |
속도 |
간단한 문자열 검색 시 빠름 |
JSONB는 빠른 검색 및 인덱싱 지원 |
인덱스 지원 |
일반 인덱스 사용 가능 |
GIN 인덱스 등 JSON 전용 인덱스 |
유연성 |
비구조적 데이터에 적합 |
반정형 데이터 저장 및 쿼리에 적합 |
공간 효율성 |
그대로 저장 (공백 포함) |
JSONB는 압축되어 저장됨 |
수정 기능 |
전체 업데이트만 가능 |
개별 키 수정 가능(JSONB) |
JSON 생성함수
# JSON 생성
json_build_object("<키1>","<밸류1","<키2>","<밸류2>", ...)
select json_build_object('a',1,'b',2) as result; ㅡ> {"a" : 1, "b" : 2}
# JSONB 생성
jsonb_build_object("<키1>","<밸류1","<키2>","<밸류2>", ...)
select jsonb_build_object('a',1,'b',2) as result; ㅡ> {"a": 1, "b": 2}
# JSON 배열생성
json_build_array("<원소1>","<원소2>","<원소3>","<원소4>", ...)
select json_build_array('a',1,'b',2,3) as result; ㅡ> ["a", 1, "b", 2, 3]
# JSONB 배열생성
jsonb_build_array("<원소1>","<원소2>","<원소3>","<원소4>", ...)
select jsonb_build_array('a',1,'b',2,3) as result; ㅡ> ["a", 1, "b", 2, 3]
JOSN 처리함수
# JSON 배열의 원소 개수 측정
json_array_length(json배열)
select json_array_length('["a", 1, "b", 2, 3]'::json) as length; ㅡ> 5
# JSON 배열의 원소 개수 측정
jsonb_array_length(jsonb배열)
select jsonb_array_length('["a", 1, "b", 2, 3]'::jsonb) as length; ㅡ> 5
# JSON오브젝트를 키 값은 text type, 밸류 값은 json data type으로 출력(jsonb도 같음)
select * from json_each('{"sujin":"i like postgresql", "Siyoun":"i like postgreql too"}');
select * from jsonb_each('{"sujin":"i like postgresql", "Siyoun":"i like postgreql too"}');
key | value
--------+------------------------
sujin | "i like postgresql"
Siyoun | "i like postgreql too"
# JSON오브젝트를 키 값은 text type, 밸류 값도 text type으로 출력(jsonb도 같음)
select * from json_each_text()('{"sujin":"i like postgresql", "Siyoun":"i like postgreql too"}');
select * from jsonb_each_text()('{"sujin":"i like postgresql", "Siyoun":"i like postgreql too"}');
key | value
--------+------------------------
sujin | i like postgresql
Siyoun | i like postgreql too
# JSON 배열 원소 조회(jsonb도 같음)
json_array_elements(<json 배열>)
select * from json_array_elements('[1, "a", {"b":"c"}, ["d", 2, 3]]');
# JSON 배열 원소 text로 조회(jsonb도 같음)
json_array_elements_text(<json배열>)
select * from json_array_elements_text('[1, "a", {"b":"c"}, ["d", 2, 3]]');