PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Coda in php e postgres

Come scritto, un altro lavoratore che tenta di rivendicare il lavoro si bloccherebbe alla query 1. Può vedere la vecchia versione della riga, ma non può aggiornarla:si bloccherebbe.

Quindi non farlo in una singola transazione. Reclamare e impegnarsi; Fai il lavoro; quindi risolvere e impegnarsi. Tutti i lavoratori in arrivo vedranno che la fila è già rivendicata. Inoltre, tu può vedere che è stato rivendicato, il che ti aiuterà nel debug e nel monitoraggio.

Quando rivendichi la riga dovresti contrassegnare con qualcosa di distintivo (un pid, se c'è solo una macchina worker, o un nome host e pid, se ce ne sono diversi) piuttosto che semplicemente con "in corso". In questo modo, se un lavoratore muore, puoi ripulirlo manualmente.