PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

File d'attente en php et postgres

Comme indiqué, un autre travailleur essayant de réclamer le travail se bloquerait à la requête 1. Il peut voir l'ancienne version de la ligne, mais ne peut pas la mettre à jour - il se bloquerait.

Ne le faites donc pas en une seule transaction. Réclamer et s'engager ; faire le travail; puis résolvez et engagez-vous. Tous les travailleurs qui arrivent verront que la rangée est déjà réclamée. Aussi, vous peut voir qu'il est réclamé, ce qui vous aidera dans le débogage et la surveillance.

Lorsque vous réclamez la ligne, vous devez marquer avec quelque chose de distinctif (un pid, s'il n'y a qu'une seule machine de travail, ou un nom d'hôte et un pid, s'il y en a plusieurs) plutôt que simplement avec "en cours". De cette façon, si un travailleur meurt, vous pouvez nettoyer manuellement après lui.