CREATE OR REPLACE FUNCTION "바로반복수정"(in1 integer, in3 integer, in4 integer)
RETURNS void AS
$BODY$DECLARE
name text;
BEGIN
name := 'update 회원종합 set 반복['||$1||']=0 where 일련번호>='||$2||' and 일련번호<'||$3;--업데이트문장만들고
EXECUTE name;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE
위 함수를 만들고 함수를 아래와 같이 실행하면
select 바로반복수정(127,10004000,10009000);
아래와 같은 에러가 납니다.
ERROR: deadlock detected
상세정보: Process 11117 waits for ExclusiveLock on tuple (4968,5) of relation 16840 of database 16386; blocked by process 11102.
Process 11102 waits for ShareLock on transaction 835759; blocked by process 11108.
Process 11108 waits for ShareLock on transaction 835716; blocked by process 11117.
힌트: See server log for query details.
구문: SQL statement "update 회원종합 set 반복 [127]=0 where 일련번호>=10004000 and 일련번호<10009000"
PL/pgSQL function "바로반복수정" line 6 at EXECUTE statement
update하면 자동으로 lock이나 트랜젝션이 걸리는 것 같습니다.
락이나 트랜젝션이 없이 안되는지요? |