postgresql 에서 특정시점(날짜)로 복구가 가능한 것으로 알고 있습니다.
정확한 삭제 날짜를 알수 없는경우, 해당 삭제 구문 ( DDL /DML ) 을 찾고 싶은데요.
해당 구문의 시간을 별도로 확인할 수 있는 방법이 있을까요 ?
pg_waldump 로 wal파일을 분석해도 어떤 DML인지 (insert인지 ) 정도만 확인 가능하고 쿼리전체를 볼수는 없어서요.
혹시 아시는분 있으시면 답변 부탁드립니다.
dml 관련 모든 쿼리를 감시하고 있는 것이 아니라면 waldump로 해당 테이블과 delete 명령, 시간대로 유추할 수 밖에 없습니다.
'이 명령으로 그 자료가 삭제 되었다' 라는 식의 감시가 필요하면 작업 로그성 트리거를 걸어두든가, 관련 테이블을 논리 디코딩 플러그인으로 연결해서, dml 작업 모두를 별도의 파일이나, 로그로 남겨놓지 않고서는 추적이 불가능합니다.
한 흔적이 있네요.
https://medium.com/ssgtech/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%BB%A4%EB%84%A5%ED%8A%B8-%EC%A0%81%EC%9A%A9%EA%B8%B0-8d322e042cac
그럼 log_statement = 'all' 로 일단 쿼리를 남기는 방향으로 운영해야겠습니다.
답변 감사합니다.
log_statement = 'all'
설정은 데이터베이스 성능을 많이 떨어뜨립니다.
delete 문제라면 dml 정도로 (이것도 많습미다만)
wal2json 확장모듈로 감시 영역은 db 인스턴스 밖에서 하는게 좋을거에요.
물론 wal2json 모듈 이상 동작이나 운영 미숙으로 wal 쪽 공간을 많이 쓰게 되어 인스턴스 장애 생기는 것을 잘 감안하시고.