일부 값을 저장하기 위해 생성, 변경 및 삭제 된 데이터에서 트리거되는 트리거를 사용하여 감사 로그를 구현하고 싶습니다. 이러한 트리거는 변경을 수행하고 웹 응용 프로그램에서 관리하는 사용자 ID를 사용할 수 있어야합니다. 이 데이터를 제공하는 데 몇 가지 아이디어가 있지만 트리거의 실행 컨텍스트가 무엇인지 완전히 이해하지 못하는 것 같습니다. 나는 PostgreSQL 문서 Overview of Trigger Behavior과 다른 사람을 통해 읽었지만 내 질문에 대답하지 않는 것 같습니다.PostgreSQL에서 데이터베이스 트리거 실행 컨텍스트
내가 알고 싶은 것은 하나의 실행중인 트랜잭션이있는 클라이언트 세션과 트리거 실행 및 둘 다의 수명 및 이들이 서로 의존하는 방식입니다. 내 이해에서 트리거는 트리거 실행으로 이어지는 이벤트를 작성한 클라이언트 세션과 독립적으로 데이터베이스 내에서 실행됩니다. 그 맞습니까? 이는 트리거를 의미하며 처리는 클라이언트 요청의 성능에 영향을 미치지 않으며 클라이언트는 언제든지 세션을 닫을 수 있습니다. 둘 다 독립적 인 경우 클라이언트가 트랜잭션을 롤백하는 경우 트리거가 어떻게 통보됩니까? 논리적으로 데이터가 전혀 변경되지 않았다는 것을 의미합니까? 또는 트랜잭션이 독립적으로 실행되기 때문에 트랜잭션을 커밋 한 후에 트리거가 실행됩니까?
트리거가 실행되는 이벤트를 만든 클라이언트 세션에서 트리거가 비동기로 실행 되었습니까? 이것은 클라이언트가 어떤 이유로 든 세션을 닫으면 트리거가 중단된다는 것을 의미합니다. 변경 사항은 클라이언트 트랜잭션에 직접 바인딩되므로 롤백 할 수도 있습니다.
another question에서 내가 뭘하고 싶은지 알고 행동을 이해해야합니다.
입력 해 주셔서 감사합니다. 나의 이해 트리거에서
기존 감사 트리거 구현을 살펴 보셨습니까? https://wiki.postgresql.org/wiki/Audit_trigger_91plus 및 https://github.com/2ndQuadrant/audit-trigger – bma
아니요, 트리거는 독립적이고 비동기 적이 지 않습니다. 트리거는 트랜잭션의 고유 한 부분이므로 사용자 세션에서 실행됩니다.작업이 끝난 후 (그러나 커밋 전) 롤백이 발생하면 트랜잭션과 trigerr에 의해 수행 된 모든 변경 사항이 롤백됩니다. – krokodilko
@bma : 아니, 링크를 가져 주셔서 감사하지 않았다. 나는 8.4에 머물렀으므로 새로운 것을 사용할 수는 없지만 이전 구현을 살펴볼 것이다. –