2016-11-30 1 views
3

테이블에 장부 A와 B가 두 개 있습니다. A와 B 모두에서 많은 트랜잭션이 병렬로 발생합니다. 직면트랜잭션이 커밋 될 때까지 테이블 잠금

문제는 다음 스레드 (28) 전에

[28] - A insert success for source entity_id: id001 
[28] - B update success for destination entity_id: id002 
[28] - A insert success for destination entity_id: id002 
[71] - B update success for source entity_id: id001     
[28] - commit success for [28] with amount 100 

스레드 71 업데이트 테이블 B는 대장의 변경을 얻어.

프로세스가 테이블을 사용할 때 postgres가 테이블을 잠그기 때문에 상황이 발생합니다.

  1. 커밋이 현재 스레드에서 완료 될 때까지 스레드를 대기시킬 수 있습니까?
  2. 포스트그레스에서 레코드를 잠그는 방법? (테이블의 다른 계정에 사용자가 액세스 할 수 있도록)

답변

1

Postgres는 기본적으로 레코드를 잠급니다. 동일한 내용은 docs을 참조하십시오.

제공된 로그의 경우 마지막 로그는 트랜잭션을 커밋 한 이후 여야합니다. 트랜잭션이 완료 될 때마다 대기중인 스레드가 즉시 인계하며 로그가 이러한 방식으로 표시되는 이유 여야합니다.