SKIP LOCKED
Пропустить заблокированное.
Предложение SKIP LOCKED
заставляет движок пропускать записи, заблокированные другими транзакциями, вместо того,чтобы ждать или вызывать ошибки при конфликте.
Такая функциональность полезна для реализации рабочих очередей, когда один или несколько процессов отправляютданные в таблицу и выдают событие, в то время как рабочие процессы прослушивают эти события и читают/удаляют элементы из таблицы.Используя SKIP LOCKED
, несколько рабочих потоков могут получать эксклюзивные рабочие элементы из таблицы без конфликтов.
Note
|
Если предложение |
См. также: SELECT … SKIP LOCKED
,UPDATE … SKIP LOCKED
.
SKIP LOCKED
для организации очередиПодготовка метаданных.
create table emails_queue (
subject varchar(60) not null,
text blob sub_type text not null
);
set term !;
create trigger emails_queue_ins after insert on emails_queue
as
begin
post_event('EMAILS_QUEUE');
end!
set term ;!
Отправка данных приложением или подпрограммой
insert into emails_queue (subject, text)
values ('E-mail subject', 'E-mail text...');
commit;
Клиентское приложение может прослушивать событие EMAILS_QUEUE
, чтобы отправлять электронные письма, используя этот запрос:
delete from emails_queue
rows 10
skip locked
returning subject, text;
Может быть запущено более одного экземпляра приложения, например, для балансировки нагрузки.