테이블을 만들 때 updated_timestamp라는 컬럼이 필요할 때가 있따.
근데 업데이트 할 때마다 굳이 updated_timestamp = now()라고 써주지 않을꺼 아닌가?
이럴때에는 트리거를 걸어서 현재 시간을 자동업데이트 할 수 있도록 하면 된다.
--트리거 생성
create trigger 트리거명
before update
on 테이블명
for each row
execute procedure update_modified_column();
create function update_modified_column() returns trigger
SET search_path = DB_schema
language plpgsql
as
$$
BEGIN
NEW.updated_timestamp = now();
RETURN NEW;
END;
$$;
alter function update_modified_column() owner to DB_user;
테이블 생성할 때에는 컬럼을 아래처럼만 명시하면 된다.
updated_timestamp timestamp,
네, 맞습니다. 현재 정의하신 트리거와 함수에 따라 a 테이블에서 레코드를 업데이트할 때 updated_timestamp 컬럼은 자동으로 현재 시간으로 업데이트됩니다.
여기서 동작을 간단히 요약하자면:
트리거 정의
: a_profit_after_upd라는 이름의 트리거를 정의했습니다. 이 트리거는 a 테이블에서 레코드가 업데이트되기 전(BEFORE UPDATE)에 실행됩니다.
트리거 함수
: update_modified_column이라는 이름의 함수는 NEW.updated_timestamp 값을 현재 시간(now())으로 설정하고, 업데이트된 레코드를 반환합니다.
트리거와 함수 연결
:트리거명
트리거는 a 테이블의 각 업데이트(FOR EACH ROW)마다 update_modified_column() 함수를 실행합니다.
따라서, 테이블 a의 레코드가 업데이트될 때마다, 트리거가 자동으로 updated_timestamp 컬럼을 현재 시간으로 설정하게 됩니다. 이로 인해 레코드를 업데이트할 때 updated_timestamp를 명시적으로 지정할 필요가 없습니다.
즉, UPDATE 쿼리를 실행할 때 updated_timestamp를 지정하지 않더라도, 트리거가 자동으로 현재 시간으로 업데이트해줍니다.