Atomique de mise à JOUR .. SÉLECTIONNEZ dans Postgres

Je suis en train de construire un mécanisme de files d'attente de toutes sortes. Il y a des lignes de données qui ont besoin de traitement, et un indicateur d'état. Je suis à l'aide d'un update .. returning clause de le gérer:

UPDATE stuff
SET computed = 'working'
WHERE id = (SELECT id from STUFF WHERE computed IS NULL LIMIT 1)
RETURNING * 

Est imbriquée sélectionner une partie de la même verrouillage de la mise à jour, ou puis-je avoir une condition de course ici? Si oui, ne l'intérieure sélectionnez besoin d'être un select for update?

  • Si vous essayez de construire un message de la file d'attente en sql, et qu'il est raisonnable de grand volume de tâches, je suis en supposant que vous êtes finalement va vouloir supprimer les lignes les travaux terminés. Ces tuyau de vos indices, alors assurez-vous de passer l'aspirateur analyser chaque fois que vous nettoyez les tâches terminées ou votre performance d'analyse. Vous pourriez envisager de l'aide d'un message de la file d'attente (rabbitmq, zeromq, activemq, etc).
InformationsquelleAutor kolosy | 2012-07-18