Postgresql timestamp 컬럼 추가하기

DB 에서 거래를 등록/변경할때, 어느 시점에 등록했는지를 기록하기 위해서 보통 timestamp 를 사용한다. postgresql 에서 timestamp 컬럼을 추가해본적이 없어서 시행착오를 겪긴했다. 그 내용을 남겨보도록 한다.

timestamp 의 종류

timestamp 를 지정할때, timezone 정보를 포함할 수도 있고, 제거할 수도 있다. Dbeaver 툴로 기존테이블에 컬럼을 추가해보려하니, 아래 4가지의 타입으로 컬럼을 추가할 수 있었다.

그래서 아래와 같이 컬럼을 4개 추가해보았는데,

ALTER TABLE app01.account_bsc ADD timestamp1 timestamp NULL;
ALTER TABLE app01.account_bsc ADD timestamp2 timestamptz NULL;
ALTER TABLE app01.account_bsc ADD timestamp3 timestamp without time zone NULL;
ALTER TABLE app01.account_bsc ADD timestamp4 timestamp with time zone NULL;

만들고나서 확인해보니, 결과적으로는 아래의 결과가 나왔다. 결국 timestamp, timestamptz 두개로 나뉜다고 보시면 된다.

컬럼이 추가된 테이블을 바탕으로 역으로 DDL 스크립트를 만들어봤더니 아래처럼 나온다.

CREATE TABLE account_bsc (
    /* 일부 컬럼내용 삭제 */
	timestamp1 timestamp NULL,
	timestamp2 timestamptz NULL,
	timestamp3 timestamp NULL,     -- timestamp without time zone
	timestamp4 timestamptz NULL    -- timestamp with time zone
);

timestamp 에 데이터 update 하기

이렇게 만들어진 컬럼에 현재시각을 넣으려면 아래와 같이하면 된다.

UPDATE app01.account_bsc
SET timestamp1 = now()
  , timestamp2 = now()
  , timestamp3 = now()
  , timestamp4 = now()
WHERE account_id = 10002;

timezone 이 제외된 timestamp 컬럼의 결과는 아래와 같다.

-- 1. 컬럼타입이 timestamp 인 경우
select timestamp1 
from account_bsc 
where account_id = 10002;

timestamp1             
-----------------------
2023-02-04 09:41:33.186

-- 3. 컬럼타입이 timestamp without time zone 인 경우
select timestamp3 
from account_bsc 
where account_id = 10002;

timestamp3             
-----------------------
2023-02-04 09:41:33.186

timezone 이 포함된 timestamp 컬럼의 결과는 아래와 같다.

-- 2. 컬럼타입이 timestamptz 인 경우
select timestamp2 
from account_bsc 
where account_id = 10002;

timestamp2                   
-----------------------------
2023-02-04 09:41:33.186 +0900

-- 4. 컬럼타입이 timestamp with time zone 인 경우
select timestamp4 
from account_bsc 
where account_id = 10002;

timestamp4                   
-----------------------------
2023-02-04 09:41:33.186 +0900

더 보면 좋을 글들