문제

PostgreSQL에 대한 세션 (SQLALCHEMY)이 있으며 활성 커밋되지 않은 트랜잭션이 있습니다. 방금 세션을 SQL을 발행했을 수도있는 콜 트리에 전달했습니다. INSERT/UPDATE/DELETE 진술을 통해 sqlalchemy.orm 또는 근본적인 연결을 통해 직접.

이 거래에 보류중인 데이터 수정 명세서가 있는지 확인하는 방법이 있습니까? 즉, 커밋이 No-OP가 될지 여부와 롤백이 무언가를 버릴 것인지 아닌지?

나는 사람들이 지적하는 것을 보았다 v$transaction 같은 일에 대한 오라클에서 (참조 이렇게 질문). PostgreSQL에서 사용하는 것과 비슷한 것을 찾고 있습니다.

도움이 되었습니까?

해결책

시스템보기 pg_locks를 확인하여 시작하십시오.

http://www.postgresql.org/docs/8.4/interactive/view-pg-locks.html

다른 팁

다음의 진술 순서를 고려하십시오.

select txid_current();

begin;

select txid_current();

두 선택이 반환 한 트랜잭션 ID가 동일하면 공개 트랜잭션이 있습니다. 그렇지 않다면 그럼에도 불구하고 (그러나 지금은).

숫자가 다르면 부작용으로 거래를 시작했을 것입니다.

업데이트: 사실, @r2evans가 지적한 것처럼 (통찰력에 감사드립니다!) "시작"이 필요하지 않습니다. -txid_current ()는 거래중인 경우 동일한 번호를 반환합니다.

아니요, 데이터베이스 수준이 아닙니다. 아마도 sqlalchemy 수준에서 트레이싱을 추가하여 추적 할 수 있습니까?

또한 NO-OP를 어떻게 정의합니까? 이전과 동일한 값으로 값을 업데이트 한 경우 No-OP입니까? 데이터베이스 관점에서 볼 때, 그렇지 않은 경우 No-OP가 아닙니다. 그러나 응용 프로그램의 관점에서 볼 때 아마도 가능합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top