트리거 : 삭제 된 행을 아카이브 테이블로 이동


18

restrictionsPostgreSQL 데이터베이스에 작은 (~ 10 행) 테이블이 있으며 값이 매일 삭제되고 삽입됩니다.

restrictions_deleted삭제 된 모든 행이 restrictions자동으로 저장 되는 이라는 테이블을 갖고 싶습니다 . 이후 restrictions일련 ID를 가지고, 더 중복이되지 않습니다.

PostgreSQL에서 이러한 트리거를 작성하는 방법은 무엇입니까?

답변:


16

이전 데이터를 restrictions_deleted삭제하기 전에 테이블 로 이동하면 됩니다. 이것은 OLD데이터 유형으로 수행됩니다 . regulat INSERT문을 사용하고 OLD값을 삽입 할 값으로 사용할 수 있습니다.

CREATE TRIGGER moveDeleted
BEFORE DELETE ON restrictions 
FOR EACH ROW
EXECUTE PROCEDURE moveDeleted();


CREATE FUNCTION moveDeleted() RETURNS trigger AS $$
    BEGIN
       INSERT INTO restrictions_deleted VALUES(OLD.column1, OLD.column2,...);
       RETURN OLD;
    END;
$$ LANGUAGE plpgsql;

2
명시적인 열 값 목록을 다음과 같이 바꿀 수 있습니다.VALUES((OLD).*)
KayEss

1
잘 작동하지만 create function전에 호출해야 create trigger합니다. 그리고 VALUES((OLD).*)KayEss에 의해 제안 트릭은 좋은 것입니다.
mivk

8

다른 접근 방식을 사용하는 경우 테이블에 'deleted'부울 플래그를 추가하거나 'deleted_at'타임 스탬프를 추가하는 것을 고려해 보셨습니까?

또는 더 나은 방법은 데이터베이스 테이블에 대한 CRUD 액세스를 거부하고 트랜잭션 API에서 감사 내역을 처리하는 것입니다. :)


+1 감사합니다-내 경우에는 효과가 없지만 단일 테이블 만 사용하는 좋은 접근 방식입니다.
Adam Matan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.