Database 시간 기본 값
Database 시간 기본 값
Database에 NOW()
RDBS를 사용하면서 Mongoose를 사용할 때와 다르게 일단 직접 쿼리문을 작성하고 있다.
Insert
문을 작성할 때, 작성 시간과 수정 시간을 저장하기 위해 NOW()
를 통해 현재 시간을 작성했다.
하지만 매번 Insert
문을 작성하고, Update
문을 작성할 때마다 쿼리에 NOW()
를 써야할까?
Table 생성 시 Default
Insert
, Update
에서 무의식적으로 NOW()
를 통해 시간 값을 생성했는데, 생각해보면 Table을 생성할 때, Default로 사용할 수 있지 않을까 싶었다. (질문을 받아 생각해보니 그럴 것 같았다.)
CREATE TABLE posts (
title varchar(100) NOT NULL,
created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
그 결과 아래와 같이 기본 값으로 시간을 저장할 수 있게 되었다.
Update할 때 기본으로?
하지만 아직 Update
를 진행할 때, 기본으로 updated가 변경되지 않는다.
MySQL
만약 MySQL
을 사용하고 있다면,
이를 위해서 다음과 같이 Table을 생성하면 된다.
CREATE TABLE posts (
title varchar(100) NOT NULL,
created timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
PostgreSQL
하지만, PostgreSQL
을 사용할 땐, 적용되지 않았다.
MySQL과 PostgreSQL 비교를 확인해보면, PostgreSQL
에서는 Update
시 현재 시간을 기본 값으로 적용하기 위해서는 트리거를 사용한다.
CREATE OR REPLACE FUNCTION update_updated_column()
RETURNS TRIGGER AS '
BEGIN
NEW.updated = NOW();
RETURN NEW;
END;
' LANGUAGE 'plpgsql';
CREATE TRIGGER update_updated_modtime BEFORE UPDATE
ON posts FOR EACH ROW EXECUTE PROCEDURE
update_updated_column();
트리거의 결과로 updated
를 NOW()
로 갱신하는 FUNCTION
을 생성하고, Update
시 해당 FUNCTION
을 실행하도록 하는 TRIGGER
를 생성한다.
참고자료
- Update timestamp when row is updated in PostgreSQL
- MySQL versus PostgreSQL: Adding a 'Last Modified Time' Column to a Table
Author And Source
이 문제에 관하여(Database 시간 기본 값), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sinf/Database-시간-기본-값저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)