PostgreSQL에서 행이 업데이트 될 때 타임 스탬프 업데이트


85

MySQL에서는 changetimestamp행이 변경 될 때마다 열을 업데이트하는 위치에서 실행할 수 있습니다 .

create table ab (
  id int, 
  changetimestamp timestamp 
    NOT NULL 
    default CURRENT_TIMESTAMP 
    on update CURRENT_TIMESTAMP 
);

PostgreSQL에서 위와 비슷한 것이 있습니까?


트리거가 필요한 PostgreSQL에서는 쉽지 않습니다. pointbeing.net/weblog/2008/03/…
mechanical_meat

2
MySQL에는 timestamp버전 및 설정에 따라 열에 대해 여러 "특별 처리"가 있으며 (다행히도!) Postgres에서는 재현 할 수 없습니다. 허용 추천 0A의 timestamp열 변형이나 NULL특정한 별자리에 입력을 현재 타임 스탬프로. 미묘한 차이점을 인식하기 위해 두 RDBMS의 매뉴얼을 공부하십시오 : MySQLPostgres .
Erwin Brandstetter 2014 년

1
@ErwinBrandstetter는 아래에 제공된 답변이 2018 년에 타임 스탬프를 자동 업데이트하는 모범 사례입니까?
CommonSenseCode

답변:


124

다음과 같이 테이블의 changetimestamp 열을 업데이트하는 함수를 만듭니다.

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

다음과 같이 업데이트가 발생할 때마다 update_changetimestamp_column () 함수를 호출하는 테이블에 트리거를 만듭니다.

    CREATE TRIGGER update_ab_changetimestamp BEFORE UPDATE
    ON ab FOR EACH ROW EXECUTE PROCEDURE 
    update_changetimestamp_column();

2
그래서 방아쇠를 통하는 것 외에는 내가 원하는 것을 할 수있는 다른 방법이 없습니까? 300 개 이상의 내 모든 테이블에 대해 '업데이트 타임 스탬프'를 구현하고 싶기 때문입니다. 그리고 트리거를 만들면 성능 문제가 발생할 수 있다고 생각합니다.
bichonfrise74

5
내가 아는 한 이것이 postgresql에서 이것을 수행하는 표준 방법입니다. mysql에서 "on update current_timestamp"를 작성하면 백그라운드의 테이블에 트리거가 생성됩니다. 차이점은 트리거를 작성하지 않고 여기에 수동으로 작성한다는 것입니다.
Charles Ma

3
적어도 합리적인 데이터베이스에서는 성능 저하가 거의 없습니다.

5
함수에 매개 변수로 업데이트해야하는 열 이름을 지정하는 방법이 update_changetimestamp_column있습니까?
Antoan Milkov 2014 년

7
@womble 이것의 예를 게시하는 것이 매우 유용 할 것입니다. 업데이트 할 열을 동적으로 지정하는 방법을 관리하는 경우 답변으로 작성하겠습니다.
MirroredFate
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.