SQL Timestamp

728x90

H2 데이터베이스와 호환을 고려해 schema.sql 변경

timetampz -> timestamp with time zone

 

CREATE TABEL ...
...
	created_at timestampz NOT NULL,
	update_at timestampz,
	created_at timestamp with time zone NOT NULL,
	updated_at timestamp with time zone,

 

PostgreSQL 시간적 데이터 유형

  • DATE : 날짜만 저장합니다.
  • TIME : 하루 중 시간 값을 저장합니다.
  • TIMESTAMP : 날짜와 시간 값 모두 저장합니다.
  • TIMESTAMPZ : 시간대 인식 타임스탬프 데이터 유형입니다. 타임스탬프와 시간대를 약어로 표현한 것입니다.
  • INTERVAL : 기간을 저장합니다.

TIMESTAMPZ 은 SQL 표준의 시간 데이터 유형에 대한 PostgreSQL 의 확장입니다.

 

타임 스탬프

  • timestamp : 시간대가 없는 타임스탬프.
  • timestampz : 시간대를 포함한 타임스탬프.

예제

CREATE TABLE timestamp_demo (
	ts TIMESTAMP,
	tstz TIMESTAMPZ
);

 

 

데이터베이스 서버의 시간대를 America/Los_Angeles 으로 설정합니다.

SET timezone = 'Americal/Los_Angeles';

SHOW TIMEZONE;

TimeZone
--------------------
  America/Los_Angeles
(1 row)

 

데이터 삽입과 조회

INSERT INTO timestamp_demo (ts, tstz)
VALUES ('2016-06-22 19:10:25-07', '2016-06-22 19:10:25-07);

SELECT
	ts, tstz
FROM 
	timestamp_demo;
    
    ts                   |          tstz
---------------------+------------------------
 2016-06-22 19:10:25 | 2016-06-22 19:10:25-07
(1 row)

 

현재 세션의 시간대를 변경 후 조회

SET timezone = 'America/New_York';

SELECT 
  ts, tstz
FROM 
  timestamp_demo;
ts                   |          tstz
---------------------+------------------------
 2016-06-22 19:10:25 | 2016-06-22 22:10:25-04
(1 row)
  • → timestamp 타입의 열의 값은 변경되지 않았다.
  • → timestampz 타입의 열의 값은 새로운 시간대에 맞게 변경됨

이를 통해 time zone 을 설정하는 것의 차이점에 대해서 알 수 있다.

 

항목 timestamp timestampz(timestamp with time zone)
저장 방식 시간대 없이 단순히 날짜 + 시간만 저장한다. UTC 기준으로 내부 저장, 시간대에 따라 표시
시간대 적용 클라이언트/ 세션의 시간대와 무관 클라이언트 / 세션의 시간대에 따라 자동 변환
표준 준수 SQL 표준 PostgreSQL 확장
예시 저장 2025-03-27 15:00:00 2025-03-27 15:00:00+09 ( 내부적으로 UTC로 저장 후 표시 시 변환됨)