세 제어 statement
BEGIN (또는 START TRANSACTION) 가 트랜잭션 열기. COMMIT 이 finalise — 모든 변경이 다른 세션에 visible 하고 디스크에 durable. ROLLBACK 이 다 버림. 99% 시간 쓸 트랜잭션 제어 statement 셋.
앱측 패턴
모든 DB 드라이버가 이거 감쌈. Python psycopg 에서: conn.commit() / conn.rollback(). SQLAlchemy 에서: 세션 commit() 또는 context manager. Node pg: client.query('COMMIT') / client.query('ROLLBACK'). Semantics 동일; syntax 가 감쌈.
실패 케이스 항상 처리
전형 버그: BEGIN, statement 실행, COMMIT — 그러나 어느 statement 가 예외 던지면 트랜잭션이 열린 채 idle. 그 connection 의 다음 statement 가 "current transaction is aborted" 에러. 예외에 항상 롤백.