postgresql 오류: current transaction is aborted commands ignored until end of transaction block

1865 단어 PostgreSQLerror

발생한 상황



Transaction 중에 행 잠금을 구현했을 때 발생한 오류입니다.
다음 행 검색 오류를 기대했습니다.
pq: could not obtain lock on row in relation "table_xxxx"

↑는 「행 락 되고 있기 때문에, 취득할 수 없어요~」라고 하는 것.
pq: current transaction is aborted, commands ignored until end of transaction block

그러나 의도에 반하여 ↑의 메시지가 발생했습니다. 즉, "현재 트랜잭션을 중단합니다. 명령은 트랜잭션 블록이 끝날 때까지 무시됩니다."라는 오류가 발생하기 시작했습니다.

처리의 전체도





좀 더 자세히



실은, 행 락 취득 에러를 훅해, 같은 트랜잭션(transaction)내에서 다른 처리를 행하려고 하고 있을 때 발생하고 있습니다.

오류가 발생하는 프로세스의 전체 다이어그램





원칙적으로 postgres 트랜잭션에서 오류가 발생한 후 다른 쿼리를 실행하려면 롤백을 사용하여 트랜잭션을 지워야 한다는 것이었습니다. 트랜잭션에 에러를 방치해 버리면 모든 처리는 실행되지 않는다고 하는 것입니다(이번은 이것에 상당하고 있습니다).
에러 훅은 원래 동일 트랜잭션으로는 할 수 없다고 하는 것이군요.

롤백이란?



ROLLBACK은 현재 트랜잭션을 롤백하고 트랜잭션에 의해 수행된 모든 업데이트를 삭제합니다. (Description: ROLLBACK)

해결 방법



트랜잭션내에서 에러를 훅해 별처리등을 실시할 수 없기 때문에, 반드시 에러 발생 후에는 롤백해 트랜잭션을 클린인 상태로 하면 발생하지 않게 됩니다.
문서 또한 트랜잭션 중 오류에 대해 언급합니다.

트랜잭션은 모든 데이터베이스 시스템에서 기본적인 개념입니다. 트랜잭션의 기본 요점은 여러 단계를 단일 "모든 카나시카"작업으로 결합하는 것입니다. 절차 진행 중 상태는 다른 움직이는 트랜잭션에서 볼 수 없습니다. 그리고 어떤 오류가 발생하면 트랜잭션이 완료되지 않습니다. 따라서 데이터베이스는 오류의 원인이 된 절차에 의해 전혀 영향을받지 않습니다.

좋은 웹페이지 즐겨찾기