2014-05-18 11 views
1

psycopg를 사용하여 트랜잭션을 구현하려고합니다. 분리를 적용 할 수 없습니다.

내가 구현하고자하는 SQL입니다 :

BEGIN; 
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 
SELECT * FROM students WHERE matnr = 123457 FOR UPDATE; 

UPDATE studierende 
SET name = 'Name' WHERE matnr = 123457; 
COMMIT; 

을하지만

self.dbConnect = pg.connect(host=db_host, 
database=db_database, user=db_user, password=db_password) 

를 연결하고 분리 레벨

self.dbConnect.set_isolation_level(3); 

를 설정하고 .execute("SELECT...FOR UPDATE", data)

으로 SQL을 실행할 때

다른 사람들이 선택할 수 있도록 행을 잠궈 야합니다. 그러나 격리 수준을 설정했지만 다른 병렬 쿼리에서 행을 실행하고 심지어 업데이트 할 수도 있습니다. 첫 번째 사용자가 변경 사항을 커밋 할 때까지 잠금 상태를 유지해야합니다.

psql 터미널에서 이것은 불가능합니다. 하지만 여기 있습니다. 왜?

답변

0

당신이 그것을 할 방법에 따라, 자동 커밋 함께 할 수있는 뭔가가있을 수 있습니다. 자동 커밋을 사용하면 SELECT FOR UPDATE를 실행하고 즉시 커밋하고 잠금을 해제하여 SELECT FOR UPDATE를 시작한 다음 다른 세션에서 테스트하는 동안 COMMIT 전에 누르지 않아도됩니다.

관련 문제