다른 테이블에서 읽기 작업을 수행 할 수 없도록 잠금이 설정된 테이블에서 행을 읽으려고합니다.잠금이 작동하지 않는 쿼리 선택
수면을 사용하는 psql
콘솔에서 실행중인 쿼리입니다.
select * from TABLE_NAME for update nowait; SELECT pg_sleep(30);
내 표는 테스트 목적으로 only one row
이 있으므로 조건은 여기 어디에 필요하지 않습니다 :
select * from TABLE_NAME for update; SELECT pg_sleep(30);
는 또한 nowait
을 시도했다.
이제 다른 psql
콘솔에서 동일한 테이블 (30 초 이내에)에서 select
작업을 수행 중이지만 여전히 레코드를 읽을 수 있습니다.
제 질문은 왜이 잠금이 작동하지 않는가입니다. 아니면 올바른 방법이 아닌가? 누군가 나를 안내 할 수 있습니까?
읽기 전용이 아닌 업데이트 용으로 잠글 수 있습니다. 업데이트를 시도하십시오. –
@ClodoaldoNeto 업데이트를 사용했습니다. 기본적으로 다른 사람들이'읽기 '를 막고 싶습니다. 그러나이 테스트 목적을 위해 모든 종류의 작업을 잠그는 것이 나를 위해 할 것입니다. –
전체 테이블을 잠그지 않으면 (읽기 전용 모드를 사용하여) 읽기 요청을 차단할 수 없습니다. –