postgresql 날짜 및 시간

Yun·2021년 4월 4일
5

postgresql

목록 보기
2/3

티스토리를 시작으로 하여 어느덧 블로그에 공부 겸 메모를 남긴지 1년이 지났습니다.
새로운 프로젝트 FAST API 를 사용하여 docker 환경에서 개발을 하던도중 timezone을 Asia/Seoul 로 설정하여도 시차가 발생하는 버그를 보고 다시금 postgresql 책을 펼쳤습니다.
날짜 및 시간 timezone setup 에 관해서 알아 보겠습니다.

날짜 및 시간

TIMESTAMP 는 날짜와 시간 정보를 모두 나타냅니다.
시간은 세계 표준시(UTC)가 있고 현재 우리가 보는 시간이 있습니다.
그래서 TIMESTAMP는 두가지로 나뉘게 됩니다.

하나는 시간대 정보를 반영하지 않은 TIMESTAMP WITHOUT TIME ZONE
다른 하나는 시간대 정보를 반영한 TIMESTAMP WITH TIME ZONE의 데이터 타입을 사용합니다.

psql 에서는 TIMESTAMPTZ 로 축약해서 쓸수도 있습니다.

DATE는 문자 그대로 날짜 정보만 저장하는 자료형입니다.

TIME은 시간 정보만 저장하는 자료형이고, TIME 또한 시간대 정보를 반영하지 않은 것과 반영한 것 두가지로 나뉩니다.

TIME WITHOUT TIME ZONE(같은 표현으로 TIME)은 전자와 같고 TIME WITH TIME ZONE은 후자와 같습니다.

TIMESTAMP와 TIME은 (p)를 붙여 '초'단위의 소수점 값을 정확하게 표현할 수 있습니다.
기본적으로 정밀도에는 명시적인 한계가 없지만 허용되는 p의 범위는 0 ~ 6 입니다.
만일, 데이터 타입을 TIME(5)로 선언했다면 출력 결과는 HH:MM:SS.ppppp입니다.

예제

우선 네가지 데이터 타입을 모두 만듭니다.

CREATE TABLE datetime_study (
	type_ts TIMESTAMP,
    type_tstz TIMESTAMPTZ,
    type_date DATE,
    type_time,
);

그리고 다음 데이터를 삽입합니다.

INSERT INTO datetime_study (
	type_ts, type_tstz, type_date, type_time)
    VALUES(
    	'2020-07-26 20:00:25+09',
        '2020-07-26 20:00:25+09',
        '2020-07-26',
        '18:00:00'
);
SELECT * FROM datetime_study;

TIMESTAMP WITHOUT TIME ZONE 데이터 타입에는 시간대 정보가 저장되지 않았지만 TIMESTAMPTZ 의 데이터 타입에는 +9 라는 한국 시간대 정보가 남아있습니다.

psql 의 TIMEZONE 값을 확인하기 위해서

SHOE TIMEZONE;

만약 시간대를 LA로 바꾸고 싶다면

SET TIMEZONE = 'America/Los_Angeles';
  • DATE
    - 날짜 정보만 표시 / 4bytes
  • TIME
    - 시간 정보만 표시, 세계표준시 (시간대 정보 반영x) / 8bytes
  • TIME WITH TIME ZONE
    - 시간 정보만 표시, 세계표준시 + 시간대 정보 반영 / 12bytes
profile
개발 재밌따..ㅎ

0개의 댓글