SQL

SQL JSON 생성,처리 함수

봄다온 2025. 1. 20. 11:40

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]]');

'SQL' 카테고리의 다른 글

SQL 서브쿼리 연산자  (0) 2025.01.20
SQL 날짜 & 시간 연산자, 날짜 & 시간 함수  (0) 2025.01.20
SQL 배열 연산자  (0) 2025.01.20
SQL COALESCE 함수  (0) 2025.01.20
SQL NULLIF 함수  (0) 2025.01.20