2013-02-05 4 views
5

테이블의 레코드에서 필드를 선택하고이 필드 중 하나만 업데이트하려고합니다. 어떻게해야합니까?PostgreSQL의 Update 문 선택

SELECT v.idvideo, v.title 
FROM video v WHERE v.schedulingflag IS FALSE AND v.errorflag IS FALSE 
ORDER BY v.idvideo LIMIT 1 FOR UPDATE ; 

UPDATE video SET schedulingflag = true; 

을하지만이 방법으로 모든 레코드에 진정한 필드 "schedulingflag"을 설정합니다

나는이 시도!

답변

12

SELECT FOR UPDATE 구문을 사용하면 PG에서 해당 레코드를 업데이트하고 동시 액세스를 차단한다는 메시지를 표시합니다. 그러나 잠긴 특정 레코드를 변경하려면 적절한 UPDATE 호출을 발행해야합니다.

UPDATE video SET schedulingflag = true 
WHERE schedulingflag IS FALSE AND errorflag IS FALSE; 
+0

안녕, 난 당신이 내 앞의 질문을 볼 수 있습니다, 테이블을 잠글 :이 경우

, 그냥 예컨대, 당신의 UPDATE에서 같은 WHERE 절을 사용할 수 있습니까? http://stackoverflow.com/questions/14707002/lock-table-in-postgresql#comment20571089_14707002 –

+0

문제가 해결되면이 대답을 허용으로 표시해주세요. –

+1

참고 : FOR UPDATE에 LIMIT 1을 사용하고 있습니다. 이는 일반적으로 where 절이 둘 이상의 레코드를 반환 할 수 있음을 의미합니다. 자, 테이블에 대한 DDL이 없으므로 IDVideo라면 UPDATE 비디오 SET을 사용해야한다. scheduleflag = true WHERE idvideo =? 이유는 동일한 쿼리 (ORDER BY/LIMIT)를 사용하더라도 다른 레코드를 계속 업데이트 할 수 있기 때문입니다 (이전에 새 ID를 삽입 할 수 있음) – Rahly