[PostgreSQL] JSON

๊ด€๊ณ„ํ˜• DB๋“ค์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ์กฐ๊ธˆ๋งŒ ๋ฐ”๋€Œ๋”๋ผ๋„ ์—„์ฒญ๋‚œ ์ˆ˜๊ณ ๊ฐ€ ๋™๋ฐ˜๋œ๋‹ค.
๋ฐ์ดํ„ฐ๋ณ„๋กœ ํ…Œ์ด๋ธ”์„ ๋ถ„๋ฆฌํ•˜๊ณ ... ํ‚ค๊ฐ’์„ ํ†ตํ•ด ์—ฐ๊ด€์„ ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

ํ•˜์ง€๋งŒ PostgreSQL์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋˜ฅ์ฐฌ JSON ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฅผ ์กฐ๊ธˆ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋จผ์ €, PostgreSQL์€ JSON๊ณผ JSONB๋ผ๋Š” JSON ์ „์šฉ ํƒ€์ž…์„ ์ง€์›ํ•œ๋‹ค.
์ด ๋‘˜์€ ์•ฝ๊ฐ„์˜ ์ฐจ์ด๋ฅผ ์ œ์™ธํ•˜๋ฉด ๊ฑฐ์˜ ๊ธฐ๋Šฅ์ด ๊ฐ™์€๋ฐ, JSONB์ด ์ธ๋ฑ์‹ฑ๋„ ๋˜๊ณ , ๋˜๋Š”๊ฒŒ ๋” ๋งŽ์€ ํŽธ์ด๋‹ค. ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด JSONB๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค.

JSONB ํƒ€์ž… ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
JSON ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์— ์บ์ŠคํŒ…์„ ๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.



๊ฐ’ ํš๋“

json ๊ฐ’ ์ ‘๊ทผ ์—ฐ์‚ฐ์ž๋กœ๋Š” ->์™€ ->>๊ฐ€ ์ œ๊ณต๋œ๋‹ค. ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์—๋Š” ์ธ๋ฑ์Šค๋‚˜ ํ‚ค๊ฐ’ ํ…์ŠคํŠธ๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.

->๋Š” jsonb์ด๋‚˜ json์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ->>๋Š” ๋ฌธ์ž์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

->>๋Š” ์ˆซ์ž๊ฐ€ ๋“ค์–ด์žˆ์–ด๋„ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•œ๋‹ค.



JSON ๋ณ‘ํ•ฉ

๋ฌธ์ž์—ด๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, || ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JSON ํƒ€์ž…๋ผ๋ฆฌ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.



๊ฐ’ ์‚ญ์ œ

๊ฐ’ ์‚ญ์ œ๋Š” ๋งค์šฐ ์‰ฝ๋‹ค.
๊ทธ๋ƒฅ ํ‚ค๊ฐ’ ํ…์ŠคํŠธ๋กœ ๋บ„์…ˆ์„ ํ•˜๋ฉด ๋œ๋‹ค!

๊ฐ์ฒด ๊ตฌ์กฐ ๊นŠ์ˆ™ํžˆ ๋“ค์–ด์žˆ๋Š” ๊ฐ’์˜ ๊ฒฝ์šฐ, #- ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉ, ํ‚ค๊ฐ’์„ ์ค‘์ฒฉํ•ด ์‚ญ์ œ๋ฅผ ํ•œ๋‹ค.



๊ฐ’ ์‚ฝ์ž…

๊ฐ’์„ ์‚ฝ์ž…ํ•  ๋•Œ๋Š” jsonb_set์ด๋‚˜ jsonb_insert ๋“ฑ์˜ ์ „์šฉ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
set์€ ๋ฎ์–ด์“ฐ๊ธฐ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๊ณ , insert๋Š” ์ƒˆ ์‚ฝ์ž…์—๋งŒ ์œ ํšจํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
๋‘˜๋‹ค ์ˆœ์„œ๋Œ€๋กœ json ๊ฐ’, ๊ฒ€์ƒ‰ํŒจํ„ด, ์‚ฝ์ž…๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›๋Š”๋‹ค.

๊ทธ๋ ‡๋‹ค.

์ด์™ธ์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ•จ์ˆ˜๋“ค๊ณผ ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ์ง€๋งŒ, ์ผ๋‹จ์€ ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ์ •๋ฆฌํ•œ๋‹ค.


์ฐธ์กฐ
https://www.postgresql.org/docs/9.3/functions-json.html
https://stackoverflow.com/questions/23490965/postgresql-remove-attribute-from-json-column
https://stackoverflow.com/questions/18209625/how-do-i-modify-fields-inside-the-new-postgresql-json-datatype