PostgreSQL에서 JSON과 JSONB는 JSON 데이터를 저장하고 처리하기 위한 데이터 타입입니다. 두 타입 모두 JSON 포맷의 데이터를 저장할 수 있지만, 내부적으로 데이터를 처리하는 방식과 성능이 다릅니다.
데이터 처리 속도가 느립니다.
인덱싱을 지원하지 않으므로 검색 작업이 비효율적입니다
| 항목 | JSON | JSONB |
|---|---|---|
| 저장 형식 | 텍스트 형식으로 저장 | 바이너리 형식으로 저장 |
| 데이터 입력 시 처리 | 입력 데이터 그대로 저장 | 데이터를 파싱하고 정렬 후 저장 |
| 검색 속도 | 느림 | 빠름 |
| 인덱스 지원 | 지원하지 않음 | GIN, BTREE 인덱스를 지원 |
| 데이터 구조 유지 | 입력된 JSON 구조를 그대로 유지 | 키를 정렬하고 중복 키 제거 |
| 저장 공간 | 더 적게 사용 (파싱 정보 미포함) | 더 많이 사용 (파싱된 데이터 포함) |
-- JSON 타입
CREATE TABLE json_example (
id serial PRIMARY KEY,
data json
);
-- JSONB 타입
CREATE TABLE jsonb_example (
id serial PRIMARY KEY,
data jsonb
);
-- 데이터 삽입
INSERT INTO json_example (data)
VALUES (json_build_object('name', 'Alice', 'age', 25));
INSERT INTO jsonb_example (data)
VALUES (json_build_object('name', 'Bob', 'age', 30));
PostgreSQL 함수로, 키-값 쌍을 받아 JSON 객체를 생성합니다.
결과는 JSON 형식으로 반환되며, JSONB 컬럼에도 사용할 수 있습니다.
-- 특정 키의 값 추출 (JSON과 JSONB 동일)
SELECT data->>'name' AS name
FROM jsonb_example;
-- 조건 검색 (JSONB에서 더 빠름)
SELECT *
FROM jsonb_example
WHERE data->>'age' = '30';