[PostgreSQL] ํƒ€์ž„์กด

PostgreSQL์€ ํƒ€์ž„์กด์„ ์ž์ฒด์ ์œผ๋กœ ์–ด๋А ์ •๋„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•œ๋‹ค.

ํ˜„์žฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉ๋œ ํƒ€์ž„์กด์€ show tinmezone ๋ช…๋ น์–ด๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฒŒ ๋ณดํ†ต ์„ค์น˜ํ• ๋•Œ OS ํ™˜๊ฒฝ์„ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ํƒ€์‚ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” DB๋ฅผ ์“ด๋‹ค๋ฉด UTC๋กœ ์ €์žฅ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ณ , ์‹ค์ œ๋กœ๋„ ๊ทธ๊ฒŒ ๊ตญ๋ฃฐ์ด๋‹ค.

๊ตญ๊ฐ€๋ณ„ ์‹œ๊ฐ„์„ ์ฒ˜๋ฆฌํ• ๋•Œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ถŒ์žฅ์‚ฌํ•ญ์€ UTC๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ , ๊ทธ๊ฑธ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณ€ํ™˜ํ•ด์„œ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๋‹จ์ˆœ ์กฐํšŒ ์ˆ˜์ค€์—์„œ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ํ”„๋ก ํŠธ์—”๋“œ ์ˆ˜์ค€์—์„œ ํƒ€์ž„์กด์„ ๊ณ„์‚ฐํ•˜๋ฉด ๋˜๊ณ , ๋‚ด๋ถ€ ๋กœ์ง์—์„œ ํŠน์ • ๊ตญ๊ฐ€ ๊ธฐ์ค€์œผ๋กœ ๋‚ ์งœ ๊ณ„์‚ฐ์„ ํ•œ๋‹ค๊ฑฐ๋‚˜ ํ•˜๋ฉด ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์—์„œ ํƒ€์ž„์กด์„ ๋”ํ•ด์„œ ๊ณ„์‚ฐํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.




ํƒ€์ž„์กด ๋ณ€ํ™˜

PostgreSQL์€ ์ž์ฒด์ ์ธ ํƒ€์ž„์กด ๋ณ€ํ™˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
์‹œ๊ฐ„ ๊ฐ’ ์˜ค๋ฅธํŽธ์—** at time zone '์‹œ๊ฐ„๋Œ€' **ํ‘œํ˜„์„ ์ง‘์–ด๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ํ•ด๋‹น ์‹œ๊ฐ„๋Œ€์— ๋งž๊ฒŒ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ด์ค„ ๊ฒƒ์ด๋‹ค.




TIMESTAMP์™€ TIMESTAMPTZ

PostgreSQL์—์„œ ์‹œ๊ฐ„์„ ๋‹ค๋ฃจ๋‹ค๋ณด๋ฉด ๊ฐ€์žฅ ์˜คํ•ดํ•˜๊ธฐ ์‰ฌ์šด๊ฒŒ ์ด 2๊ฐ€์ง€ ํƒ€์ž…์ด๋‹ค.
์ด 2๊ฐ€์ง€๋Š” ์ผ์ž+์‹œ๊ฐ„์„ ํ•ฉํ•ด์„œ ๊ด€๋ฆฌํ•˜๋Š” 8๋ฐ”์ดํŠธ ์‹œ๊ฐ„ ํƒ€์ž…์ด๋‹ค.

๊ทผ๋ฐ ์‚ฌ์‹ค, ์ด 2๊ฐœ์˜ ํƒ€์ž…์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.
๋‘˜ ๋‹ค 8๋ฐ”์ดํŠธ์งœ๋ฆฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๊ณ , TIMESTAMPTZ๋ผ๊ณ  ํ•ด์„œ ํƒ€์ž„์กด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค.

์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋ฉด, timestamp๋Š” ์‹œ๊ฐ„์„ ๋ฐ›์•„์„œ ์ €์žฅํ• ๋•Œ ๋ฌด์‹ํ•˜๊ฒŒ ๋•Œ๋ ค๋„ฃ๋Š”๋‹ค๋Š” ๊ฒƒ์ด๊ณ , timestamptz๋Š” ์‹œ๊ฐ„์„ ๋ฐ›์•˜์„๋•Œ ํƒ€์ž„์กด์„ ๊ณ ๋ คํ•ด์„œ UTC๋กœ ๋ณ€ํ™˜ํ•œ ์ฑ„๋กœ ๋„ฃ๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์•„๋ž˜๋Š” ๊ทธ ๋™์ž‘์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ์ฟผ๋ฆฌ๋‹ค.
์•Œ์•„๋ณด๊ธฐ ์‰ฝ๋„๋ก UTC๋กœ ํƒ€์ž„์กด์„ ๊ณ ์ •ํ•˜๊ณ  ๋Œ๋ ค๋ดค๋‹ค.

set time zone 'UTC';

SELECT
'2021-01-01 00:00:00 +03:00'::timestamp as a,
'2021-01-01 00:00:00 +03:00'::timestamptz as b;

timestamp๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ƒฅ ์‹œ๊ฐ„์„ ๋ฌด์‹ํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•ด์„œ ๋„ฃ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์‹ค ์‹ค์ œ๋กœ UTC ๊ธฐ์ค€์œผ๋กœ๋Š” 3์‹œ๊ฐ„์„ ๋นผ์„œ ์ €์žฅํ•ด์•ผ ํ•จ์—๋„ ์ง€์—ญ๋ณ„ ์‹œ๊ฐ„์ด ๋“ค์–ด๊ฐ„ ๊ฒƒ์ด๋‹ค.
timestamptz๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅธ์ชฝ์— ๋ถ™์€ offset-ํƒ€์ž„์กด ์ •๋ณด๋ฅผ ๊ณ ๋ คํ•ด์„œ 3์‹œ๊ฐ„์„ ๋นผ๊ณ , UTC ๊ธฐ์ค€์œผ๋กœ ๊ฐ’์„ ๋ณ€ํ™˜ํ–ˆ๋‹ค.

์ด๋Ÿฐ ์˜ค๋ฌ˜ํ•œ ๋™์ž‘ ํƒ“์— timestamp๋Š” ์‹œ๊ฐ„๋Œ€์™€ ๊ด€๋ จํ•œ ๋ฒ„๊ทธ๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ๋‹ค.
๊ทธ๋ž˜์„œ ๊ฐ€๊ธ‰์ ์ด๋ฉด timestamp๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  timestamptz์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค. ๋Œ€๋‹ค์ˆ˜ ORM๋“ค์—์„œ๋„ ์‹œ๊ฐ„ ํ•„๋“œ๋ฅผ ์ƒ์„ฑํ• ๋•Œ timestamptz๋ฅผ ๊ธฐ๋ณธ ์˜ต์…˜์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.