easy task: concurrent select-updates
От | Nickolay |
---|---|
Тема | easy task: concurrent select-updates |
Дата | |
Msg-id | 4A9F78DB.6070204@zhukcity.ru обсуждение исходный текст |
Ответы |
Re: easy task: concurrent select-updates
|
Список | pgsql-general |
Hi All, I have a trivial task. There is a table with messages queue, let's say "msg_queue". There are a few processes and each of them is taking one message from this table at a time to transmit into communication channel. I've done it my way, but I have postgresql's messages about deadlocks and a lot of warnings. I my program, every process is doing approx the following procedure: SELECT ... FROM msg_queue WHERE busy = false ORDER BY ... LIMIT 1; if a message was found: BEGIN; SELECT id FROM msg_queue WHERE id = ... AND busy = false FOR SHARE; UPDATE msg_queue SET busy = true, channel_id = ... WHERE id = ... AND busy = false; COMMIT; I do understand that this way is stupid, but I have not came with anything else yet. Could somebody share ideas how to do this so the same message 100% WOULD NOT be transmitted over two or more channels. Sorry for the newbie question! Best regards, Nick.
В списке pgsql-general по дате отправления: