Postgres에서 오래된 레코드의 자동 에이징 아웃 (삭제)


15

Postgres에 오래된 레코드의 노후화를 지원하는 기능이 있습니까?

Postgres를 2 주보다 오래된 레코드 (로그 이벤트)가 자동으로 삭제되는 일종의 대기열로 로깅에 사용하고 싶습니다.


파티셔닝을 사용하십시오. 레코드를 삭제해도 디스크의 테이블 크기는 줄어들지 않습니다.
Sivann

@sivann 권장 사항에 따라 문제가 디스크 크기라고 가정하지 않습니까? 그의 문제가 쿼리 실행 시간이라면 삭제가 파티셔닝보다 간단한 대답 일 것 같습니다. (여전히 이것을 이해하려고
노력함

1
문제는 단순히 일정 시간이 지나면 로그 레코드가 더 이상 흥미롭지 않다는 것입니다. 오래된 행을 삭제하면 새로운 행이 새로 생길 수 있습니다.
Basil Bourque

답변:


15

시간 기반 정권에서 자동으로 행을 삭제하는 기능이 내장되어 있지 않습니다 (내가 알고 있음).

매일 cron-job 을 실행하여 간단한 DELETE명령 을 예약 하거나 목적에 pgAgent 를 사용할 수 있습니다 .

또는 당신이 사용할 수있는 분할을 하는 것이 주 파티션 마스터 테이블에서 상속이 , 호출 할 수 있습니다 log. 이렇게하면 삭제가 매우 저렴 해집니다 . 최근 2 주를 유지하고 이전 파티션을 삭제하면됩니다.

크리에이트 RULE또는를 TRIGGER시스템 시간을 기준으로 현재 주 파티션에 INSERT를 리디렉션 마스터 테이블에. 항상 마스터 테이블에 로그인하십시오 log. 미리 자식 테이블을 만듭니다. 몇 주 앞당겨서 미래의 자식 테이블을 추가하는 주간 크론 작업을 실행하십시오 ...

매뉴얼 에는 코드 예제가 있습니다 .
테이블을 자동으로 생성하는 plpgsql 함수 관련 답변 :

관련 솔루션은 RULEINSERT를 리디렉션하기 위해을 다시 만듭니다 . 트리거 기능은 현재 파티션에 동적으로 쓸 수 있습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.