저는 Postgres에서 pg_try_advisory_lock()
을 사용하고 있습니다.Postgres pg_try_advisory_lock 모든 레코드를 차단합니다
다음 두 쿼리는 table1
하나 개 이상의 레코드를 잠금 :
1)
SELECT a.id
FROM table1 a
JOIN table2 b ON a.table1_id = b.id
WHERE
table2.id = 1
AND
pg_try_advisory_lock('table1'::regclass::integer, a.id)
LIMIT 1;
하지만
SELECT a.id
FROM table1 a
JOIN table2 b ON a.table1_id = b.id
WHERE table2.id = 1
반환 한 기록을.
2)
SELECT a.id
FROM table1 a
JOIN table2 b ON a.table1_id = b.id
JOIN table3 c ON b.table2_id = c.id
WHERE
table3.id = 1
AND
pg_try_advisory_lock('table1'::regclass::integer, a.id)
LIMIT 1;
그러나 나는 단지 하나의 레코드를 잠글 pg_try_advisory_lock()
이 필요합니다.
무엇이 잘못 되었나요?
UPD
그러나 이상한 것은입니다 나는 다음과 같은 쿼리를
SELECT a.id
FROM table1 a
JOIN table2 b ON a.table1_id = b.id
WHERE
pg_try_advisory_lock('table1'::regclass::integer, a.id)
LIMIT 1;
포스트 그레스 잠금 하나의 행을 실행할 때. 그래서 Postgres는 맨 처음 행을 스캔 한 다음 멈 춥니 다. 나는 그것을 얻지 못한다 : 모든 행을 스캔 한 다음 결과를 한 행으로 제한해야 하는가, 그렇지 않은가?
다른 스크립트가 다른 레코드를 찾아야하기 때문에 선택 ...을 업데이트 할 필요가 없습니다. – fdoo4un
난 여전히 당신이 응용 프로그램 - 토지보다는 SQL - 땅에 잠겨 있어야한다고 생각합니다. –
CTE가 효과적입니다. 충고에 감사하다! 또한 질문을 업데이트했습니다. plz를 참조하십시오. – fdoo4un