[database] PostgreSQL에서 타임 스탬프를 자동으로 업데이트하는 방법

CURRENT_TIMESTAMP를 사용하여 MySQL에서 할 수있는 것처럼 새 행이 삽입되면 코드가 자동으로 타임 스탬프를 업데이트 할 수 있기를 바랍니다.

PostgreSQL에서 어떻게 이것을 달성 할 수 있습니까?

CREATE TABLE users (
    id serial not null,
    firstname varchar(100),
    middlename varchar(100),
    lastname varchar(100),
    email varchar(200),
    timestamp timestamp
)



답변

삽입하는 동안 열을 채우려면 DEFAULT값을 사용하십시오 .

CREATE TABLE users (
  id serial not null,
  firstname varchar(100),
  middlename varchar(100),
  lastname varchar(100),
  email varchar(200),
  timestamp timestamp default current_timestamp
)

INSERT명령문에 값을 제공하여 해당 열의 값을 명시 적으로 겹쳐 쓸 수 있습니다 . 이를 방지하려면 트리거 가 필요 합니다 .

행이 업데이트 될 때마다 해당 열을 업데이트해야하는 경우에도 트리거가 필요합니다 ( EJ Brennan에서 언급 한대로 ).

열 이름에 예약어를 사용하는 것은 일반적으로 좋지 않습니다. 다른 이름을 찾아야합니다timestamp


답변

삽입 트리거를 작성해야하며 레코드가 변경 될 때 변경하려는 경우 업데이트 트리거가 가능해야합니다. 이 기사는 그것을 아주 잘 설명합니다 :

http://www.revsys.com/blog/2006/aug/04/automatically-updating-a-timestamp-column-in-postgresql/

CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.modified = now();
    RETURN NEW;
END;
$$ language 'plpgsql';

다음과 같이 트리거를 적용하십시오.

CREATE TRIGGER update_customer_modtime BEFORE UPDATE ON customer FOR EACH ROW EXECUTE PROCEDURE  update_modified_column();

답변

값이 변경된 경우에만 타임 스탬프 업데이트

EJ의 링크를 기반으로이 링크에서 if 문을 추가하십시오 ( https://stackoverflow.com/a/3084254/1526023 )

CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
   IF row(NEW.*) IS DISTINCT FROM row(OLD.*) THEN
      NEW.modified = now();
      RETURN NEW;
   ELSE
      RETURN OLD;
   END IF;
END;
$$ language 'plpgsql';


답변

‘now ()’를 기본값으로 사용하면 타임 스탬프가 자동으로 생성됩니다.


답변