개발이야기/PostgreSQL

[PostgreSQL] json_build_object, json_agg 사용법, 예제, 활용하기 (JSON Functions)

후린개발자 2025. 1. 14.
반응형

PostgreSQL은 JSON 데이터를 효율적으로 처리할 수 있는 기능을 제공합니다. json_build_object와 json_agg는 JSON 데이터를 생성하고 집계하는 데 매우 유용합니다. 
이 글에서는 두 함수를 사용하는 방법과 예제를 통해 이를 이해하는 데 도움을 드리겠습니다.
 

1. json_build_object: JSON 객체 생성

-json_build_object 함수는 키-값 쌍으로 구성된 JSON 객체를 생성합니다. 키와 값은 동적으로 설정할 수 있으며, 다양한 데이터 타입을 지원합니다.

1) 사용법

json_build_object(key1, value1 [, key2, value2, ...])

 

2) 예제 1: 단순 JSON 객체 생성

SELECT json_build_object('name', '홍길동', 'age', 29, 'city', 'Seoul');

3) 예제 2: 컬럼 데이터를 JSON 객체로 변환

CREATE TABLE scheduler.tbl_test (
    id SERIAL PRIMARY KEY,
    name TEXT,
    age INT
);

INSERT INTO scheduler.tbl_test (name, age) VALUES
('홍길동', 25),
('세종대왕', 30);

SELECT json_build_object('id', id, 'name', name, 'age', age) AS user_info
FROM scheduler.tbl_test;
-- 결과:
-- {"id" : 1, "name" : "홍길동", "age" : 25}
-- {"id" : 2, "name" : "세종대왕", "age" : 30}

 


 

2. json_agg: JSON 배열 생성

-json_agg 함수는 여러 행의 데이터를 JSON 배열로 집계합니다. SELECT 결과를 배열 형태로 변환할 때 유용합니다.

1) 사용법

json_agg(expression)

 

2) 예제 1: 단순 배열 생성

SELECT json_agg(name) FROM scheduler.tbl_test;
-- 결과: ["홍길동", "세종대왕"]

 

3) 예제 2: JSON 객체 배열 생성

SELECT json_agg(json_build_object('id', id, 'name', name, 'age', age)) AS users_array
FROM scheduler.tbl_test;
-- 결과:
-- [{"id" : 1,"name" : "홍길동", "age" : 25 },
-- {"id" : 2, "name" : "세종대왕", "age" : 30 }]


 

3. 두 함수 결합하기

-json_build_object와 json_agg를 결합하면 더 복잡한 JSON 구조를 생성할 수 있습니다.
 

1) 예제: 그룹화된 JSON 데이터 생성

CREATE TABLE scheduler.tbl_test_order (
    user_id INT,
    order_id SERIAL,
    product TEXT,
    quantity INT
);

INSERT INTO scheduler.tbl_test_order (user_id, product, quantity) VALUES
(1, 'Laptop', 1),
(1, 'Mouse', 2),
(2, 'Keyboard', 1);

SELECT json_build_object(
    'user_id', user_id,
    'orders', json_agg(json_build_object('order_id', order_id, 'product', product, 'quantity', quantity))
) AS user_orders
FROM scheduler.tbl_test_order
GROUP BY user_id;
-- 결과:
-- {
--   "user_id": 1,
--   "orders": [
--     {"order_id": 1, "product": "Laptop", "quantity": 1},
--     {"order_id": 2, "product": "Mouse", "quantity": 2}
--   ]
-- }
-- {
--   "user_id": 2,
--   "orders": [
--     {"order_id": 3, "product": "Keyboard", "quantity": 1}
--   ]
-- }

반응형

댓글

💲 추천 글