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