postgre SQL 의 트리거 (인 스 턴 스 응용, 업데이트 전의 차동 데 이 터 를 어떻게 백업 합 니까?)

시계  화해시키다  diff_user_list
 
user 표 에 대해 첨삭 검 사 를 하거나 그 중 한 필드 에 변화 가 생 겼 을 때 해당 하 는 diffuser_list 표 에 필드 를 삽입 합 니 다.
 
다음 코드 의 역할 은 user 표 의 필드 '이름' 이 업 데 이 트 될 때 오래된 기록 을 diff 에 저장 하 는 것 입 니 다.user_list  표 중
 
이 유추 에 따 르 면 데 이 터 를 삽입 하여 데 이 터 를 삭제 할 때 이전 데 이 터 를 백업 하 는 코드 도 쓸 수 있다.
 
create or replace function make_diff_user_list()  


      returns trigger as


$body$

         declare
                curtime timestamp;

        begin

                curtime := `now`;

                 IF(TG_OP  = 'UPDARE' ) THEN

                            IF (OLD.user_name != NEW.user_name ) THEN

                                   INSERT INTO diff_user_list (user_id, user_name, update_time, operate_flg)

                                         VALUES ( OLD.user_id, OLD.user_name, curtime, `1` );

                                   RETURN NULL;
                            END IF;
                END IF; 

                RETURN NULL;


                 EXCEPTION
                    WHEN OTHERS THEN
                           RETURN NULL;

        end;

$body$

   language 'plpgsql' volatile

    cost 100;

 
 
설명 하 다.
위의 이 코드 는 저장 과정 (procedure) 입 니 다.
 
그 중 $body $   이 안 에는 body 가 아 닐 수도 있 고, 다른 것 일 수도 있다.  diff_user_list
 
아래 코드 는 트리거 를 만 들 고 위의 저장 과정 과 연결 되 어 있 습 니 다.
create trigger diff_user_list

after insert or update or delete ON user

for each row execute procedure make_diff_user_list();

 
주의:
===============================================
하면, 만약, 만약...
language "plpgsql" dose not exist
다음 문장 을 실행 합 니 다.
create language plpgsql

좋은 웹페이지 즐겨찾기