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로 저장 후 표시 시 변환됨) |