UPDATE,INSERT등은 따로 LOCK을 걸지않아도 내부적으로 자동 row exclusive lock인가가 걸리는데 ...
하나의 트랜잭션안에서만 의미가 있음니다.
mysql처럼 트랜젝션 개념이 없는DB( 맞나? ) 에선 다짜고짜 통으로 lock을 걸어버리는데 이건 db가 실제 처리하지 않는 시간도 lock이 걸려 있으므로 다른세션에선 그기간동안 접근수 없죠.
아래의 경우처럼 한문장만 할경우라면 lock이 아무 의미가 없고 여러개의 문을 트랜잭션 처리할경우만 필요한 옵션으로 lock을 시키시면 될거라봄니다.
mysql의 unlock과 같은 기능은 필요가 없음니다.
트랜잭션이 끝나면 자동으로 lock이 해제 될태니까요.
근데 죄송하지만 정확한 답변인지는 저도잘...
-- 전병혁 님이 쓰신 글:
>> 답변 감사합니다.
>> mysql처럼 lock를 걸면 어떻게 코딩을 해야 하나요?
>> 메뉴얼을 보아도 잘 모르겠네요
>>
>> postgres=# \h lock
>> Command: LOCK
>> Description: explicitly lock a table
>> Syntax:
>> LOCK [ TABLE ] name [, ...]
>> LOCK [ TABLE ] name [, ...] IN lockmode MODE
>>
>> where lockmode is one of:
>>
>> ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE |
>> SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE
>>
>> 이게 무슨소린지?
>> 다시 한번 답변부탁드립니다.
>>
>>
>> -- 소똥 님이 쓰신 글:
>> >> SQL문 하나 하나는 그자체로 트랜젝션이 되므로 아래처럼 begin,rollback등를 쓰실필요는 없고 안되는 증상을 잘모르겠지만 mysql처럼 lock을 걸면 안될까요?
>> >>
>> >> -- 전병혁 님이 쓰신 글:
>> >> >> 이곳을 통해 많은 것을 배우고 있는 사람입니다.
>> >> >>
>> >> >> mysql을 사용하다가 pgsql을 설치해서 짐 공부를 하고 있습니다.
>> >> >>
>> >> >> 게시판을 만들고 있는데 mysql에서 트랜잭션(?)을 어떻게 pgsql로 변경을
>> >> >>
>> >> >> 해야 하는지요...
>> >> >>
>> >> >> 게시판 알고리즘은 업데이트형 게시판입니다.
>> >> >>
>> >> >> idx라는 필드가 바로 업데이트되는 필드입니다.
>> >> >>
>> >> >> 물론 데이터가 많아지면 문제는 됩니다.
>> >> >>
>> >> >> mysql로 된 소스 올립니다(답변글을 작성했을때 입니다.).
>> >> >>
>> >> >> mysql_query("lock table $table write",$conn);
>> >> >> $result = mysql_query("update $table set idx=idx+1 where idx>=$re_idx",$conn);
>> >> >> mysql_query("unlock table",$conn);
>> >> >>
>> >> >> 위의 소스를 pgsql로 변경을 하면 어떻게 해야하나요?
>> >> >>
>> >> >> 제가 구현한 방법은 아래와 같습니다. 그런데 안되던데요
>> >> >>
>> >> >> pg_exec($conn,"begin");
>> >> >> $result = pg_exec($conn,"update $table set idx=idx+1 where idx>=$re_idx");
>> >> >> if($result) pg_exec($conn,"commit");
>> >> >> else pg_exec($conn,"rollback");
>> >> >>
>> >> >> by 전병혁 (chunbh)
|