안녕하세요
혹시 table에 대해 최근 언제 사용했는지(select,insert delete etc..) 알 수 있는 카탈로그 테이블이 있나요?
혹시 있다면 어떤테이블인지, 없는데 구현을 하셨다면 어떻게 하셨는지 조언을 구할 수 있을까요?
최근 언제 사용했는지에 대한 카탈로그 테이블은 없습니다.
확인 방법은
1. 해당 Database에 접속하셔서
select relfilenode from pg_class where relname='테이블명';
후에 해당 database oid값 폴더
cd $PGDATA/base/데이터베이스 oid
-- 데이터베이스 oid는 oid2name 명령어로 볼수 있습니다.
ls -l relfilenode값
단 이것은 해당 table이 변동되고 checkpoint가 발생한 시점의 시간입니다.
2. 모든 dml을 logging하여 찾는 방법 (디스크 용량이 많이 쌓이니 주의)
3. 특정 table의 정보만 필요할 경우 trigger를 걸어서 별도 table에 logging하는 방법 (성능저하를 고려)
제가 혹시 모르는거일수도 있지만 제가 아는 부분에서는 이와 같이 하시면 될 것 같습니다.
원하는 기능이 기업 환경에서 데이터베이스 접근 통제에 대한 것이라면,
접근 통제 솔루션을 구매하셔서 사용하세요.
그게 아니라, 단지 DBA 운영 관점에서 이제 더이상 사용하지 않는 객체를 찾을 목적이라면,
현재로써는 pg_stat_all_tables, pg_stat_all_indexes 시스템 카탈로그 뷰의 통계 정보가 일정 주기에 변화량이 있는지를 확인해서 찾은 놈을 버리거나 다른 스키마 다른 테이블 스페이스로 옮겨둡니다.
문제는 1년에 딱 한 번 사용하는 놈이라면 문제가 있겠죠.
pgaudit extension 을 사용해도 되겠네요.