PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Warteschlange in PHP und Postgres

Wie bereits geschrieben, würde ein anderer Worker, der versucht, den Job zu beanspruchen, bei Abfrage 1 blockieren. Er kann die alte Version der Zeile sehen, aber nicht aktualisieren – er würde blockieren.

Tun Sie es also nicht in einer einzigen Transaktion. Beanspruchen und verpflichten; mach die Arbeit; dann löse und verpflichte dich. Alle Arbeiter, die vorbeikommen, werden sehen, dass die Reihe bereits beansprucht ist. Auch Sie kann sehen, dass es beansprucht wird, was Ihnen beim Debuggen und Überwachen helfen wird.

Wenn Sie die Zeile beanspruchen, sollten Sie sie mit etwas Besonderem markieren (eine PID, wenn es nur einen Arbeitscomputer gibt, oder einen Hostnamen und eine PID, wenn es mehrere gibt) und nicht einfach mit „ongoing“. Auf diese Weise können Sie nach dem Tod eines Arbeiters manuell aufräumen.