2013-02-05 84 views
5

我想選擇表格的記錄中的字段並只更新這些字段中的一個。我能怎麼做?PostgreSql中的Select For 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調用來更改您鎖定的特定記錄。

在這種情況下,只要使用同一個WHERE子句中的UPDATE,e.g:

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

嗨,我要鎖定的表,你可以看到我剛纔的問題? http://stackoverflow.com/questions/14707002/lock-table-in-postgresql#comment20571089_14707002 –

+0

我會看看,但請標記此答案爲接受,如果它解決了您的問題。 –

+1

請注意,他使用FOR UPDATE的LIMIT 1,這通常意味着他的where子句可能會返回多於1條記錄。現在,因爲我沒有他的DDL表,他應該使用他的主鍵來做更新,如果它的idvideo,那麼他應該使用UPDATE視頻SET scheduleflag = true WHERE idvideo = ?.原因是即使他使用相同的查詢(ORDER BY/LIMIT),他仍然可以更新不同的記錄(可以在它之前插入一個新的ID) – Rahly