PostgreSQL의 JSON 필드에서 데이터 업데이트

Shihab Sikder 2023년6월20일
  1. PostgreSQL의 JSON 데이터 유형
  2. PostgreSQL의 JSON 필드에 새 키-값 쌍 삽입
  3. JSONB_SET()을 사용하여 PostgreSQL의 JSON 필드에서 기존 데이터 업데이트
PostgreSQL의 JSON 필드에서 데이터 업데이트

이 기사에서는 PostgreSQL을 사용하여 JSON 필드를 업데이트하는 방법에 대해 설명합니다.

PostgreSQL의 JSON 데이터 유형

PostgreSQL에는 JSON과 JSONB의 두 가지 JSON 데이터 유형이 있습니다. 다음 데이터로 채워진 다음 테이블이 있다고 가정해 보겠습니다.

postgres=# select * from product;
 id | product |                      details
----+---------+---------------------------------------------------
  1 | PC1     | {"CPU": "4.1 GHz", "HDD": "2TB", "RAM": "16GB"}
  2 | PC2     | {"CPU": "3.1 GHz", "HDD": "1TB", "RAM": "8GB"}
  3 | PC3     | {"CPU": "2.5 GHz", "HDD": "2.5TB", "RAM": "32GB"}
  4 | PC4     | {"CPU": "3.5 GHz", "HDD": "2TB", "RAM": "64GB"}
  5 | PC5     | {"CPU": "2.8 GHz", "HDD": "2TB", "RAM": "4GB"}
(5 rows)

다음 테이블을 생성하기 위해 아래 SQL 쿼리를 실행합니다.

CREATE TABLE product (
  id INT,
  product VARCHAR,
  details JSONB
);

INSERT INTO product VALUES (1, 'PC1','{"CPU":"4.1 GHz", "RAM":"16GB", "HDD":"2TB"}');
INSERT INTO product VALUES (1, 'PC2','{"CPU":"3.1 GHz", "RAM":"8GB", "HDD":"1TB"}');
INSERT INTO product VALUES (1, 'PC3','{"CPU":"2.5 GHz", "RAM":"32GB", "HDD":"2.5TB"}');
INSERT INTO product VALUES (1, 'PC4','{"CPU":"3.5 GHz", "RAM":"64GB", "HDD":"2TB"}');
INSERT INTO product VALUES (1, 'PC5','{"CPU":"2.8 GHz", "RAM":"4GB", "HDD":"2TB"}');

PostgreSQL의 JSON 필드에 새 키-값 쌍 삽입

이제 테이블의 PC1GPU를 추가한다고 가정해 보겠습니다. 키는 GPU이고 값은 RTX 3060입니다.

일반 UPDATE 쿼리와 같은 UPDATE 명령을 사용하여 이를 삽입할 수 있습니다.

통사론:

UPDATE table_name
SET json_field_name = json_field_name || new_key_value

|| 연산자는 새 JSON 개체를 이전 개체와 연결합니다. 이제 {"GPU":"RTX 3060"}PC1에 삽입하기 위한 SQL 쿼리는 다음과 같습니다.

UPDATE product
SET details = details || '{"GPU":"RTX 3060"}'
WHERE product='PC1';

이제 테이블에는 다음이 포함됩니다.

postgres=# select * from product;
 id | product |                              details
----+---------+--------------------------------------------------------------------
  2 | PC2     | {"CPU": "3.1 GHz", "HDD": "1TB", "RAM": "8GB"}
  3 | PC3     | {"CPU": "2.5 GHz", "HDD": "2.5TB", "RAM": "32GB"}
  4 | PC4     | {"CPU": "3.5 GHz", "HDD": "2TB", "RAM": "64GB"}
  5 | PC5     | {"CPU": "2.8 GHz", "HDD": "2TB", "RAM": "4GB"}
  1 | PC1     | {"CPU": "4.1 GHz", "GPU": "RTX 3060", "HDD": "2TB", "RAM": "16GB"}
(5 rows)

PC1에 새 키-값 "GPU": "RTX 3060"이 있는 것을 볼 수 있습니다.

JSONB_SET()을 사용하여 PostgreSQL의 JSON 필드에서 기존 데이터 업데이트

PC1 프로세서를 Ryzen 9로 업데이트하라는 요청을 받았다고 가정합니다. JSON 데이터 유형의 기존 값을 수정하려면 JSONB_SET() 메서드를 사용해야 합니다.

JSON 데이터 유형 열, 키 및 값의 3가지 매개변수를 사용합니다. 따라서 PC1CPURyzen 9로 업데이트하려면 다음 쿼리를 수행해야 합니다.

UPDATE product
SET details = JSONB_SET(details,'{CPU}','"Ryzen 9"')
WHERE product='PC1';

업데이트 후 테이블에는 다음 데이터가 있습니다.

postgres=# select * from product;
 id | product |                              details
----+---------+--------------------------------------------------------------------
  2 | PC2     | {"CPU": "3.1 GHz", "HDD": "1TB", "RAM": "8GB"}
  3 | PC3     | {"CPU": "2.5 GHz", "HDD": "2.5TB", "RAM": "32GB"}
  4 | PC4     | {"CPU": "3.5 GHz", "HDD": "2TB", "RAM": "64GB"}
  5 | PC5     | {"CPU": "2.8 GHz", "HDD": "2TB", "RAM": "4GB"}
  1 | PC1     | {"CPU": "Ryzen 9", "GPU": "RTX 3060", "HDD": "2TB", "RAM": "16GB"}
(5 rows)

CPU가 성공적으로 업데이트된 것을 볼 수 있습니다.

JSONB_SET()을 사용할 때 다음 사항을 확인해야 합니다.

  1. 첫 번째 매개변수는 JSON 데이터 유형 열입니다.
  2. 두 번째 매개변수는 중괄호(작은따옴표 내부)로 묶인 키 이름입니다.
  3. 세 번째 매개변수는 작은따옴표 안에 있는 업데이트된 값입니다.

이 블로그에서 PostgreSQL용 JSON 데이터 유형에 대해 자세히 알아보세요. 또한 공식 문서를 방문할 수 있습니다.

Shihab Sikder avatar Shihab Sikder avatar

I'm Shihab Sikder, a professional Backend Developer with experience in problem-solving and content writing. Building secure, scalable, and reliable backend architecture is my motive. I'm working with two companies as a part-time backend engineer.

LinkedIn Website

관련 문장 - PostgreSQL Update