덕분에table_rewrite이벤트, 유지 관리 기간에만 다시 쓰기를 허용하는 테이블 다시 쓰기 정책을 구현할 수 있습니다.
다음은 그러한 정책을 구현하는 예입니다.
함수 생성 또는 교체 no_rewrite()
반환 event_trigger
언어 plpgsql AS
$$
---
--- 로컬 테이블 재작성 정책 구현:
--- public.foo는 다시 쓰는 것이 허용되지 않습니다.
--- 다른 테이블은 오전 1시부터 오전 6시 사이에만 다시 쓰기가 허용됩니다.
--- 블록이 100개를 넘지 않는 한
---
선언
table_oid oid := pg_event_trigger_table_rewrite_oid();
current_hour 정수 := extract(현재_시간에서 '시간');
페이지 정수;
max_pages 정수 := 100;
시작
IF pg_event_trigger_table_rewrite_oid() = 'public.foo'::regclass
그런 다음
RAISE EXCEPTION '당신'은 %' 테이블을 다시 쓸 수 없습니다.
table_oid::regclass;
종료하면;
pg_class WHERE oid = table_oid에서 페이지 관련 페이지를 선택하세요.
IF 페이지 max_pages
그런 다음
RAISE EXCEPTION '% 페이지 미만의 테이블에 대해서만 다시 쓰기가 허용됩니다',
max_pages;
종료하면;
현재_시간이 1과 6 사이가 아닌 경우
그런 다음
RAISE EXEPTION '재작성은 오전 1시에서 오전 6시 사이에만 허용됩니다';
종료하면;
끝;
$$;
이벤트 트리거 생성 no_rewrite_allowed
ON 테이블_재작성
실행 절차 no_rewrite();