Jaké jiné řešení mám pro tento problém?
Použijte LISTEN
a NOTIFY
sdělit své aplikaci, že se věci změnily.
Můžete odeslat NOTIFY
ze spouštěče, který také zaznamenává změny v tabulce fronty.
Budete potřebovat připojení PgJDBC, které odeslalo LISTEN
pro události, které používáte. Musí se dotazovat databáze zasíláním pravidelných prázdných dotazů (""
) pokud používáte SSL; pokud nepoužíváte SSL, můžete se tomu vyhnout pomocí kontrol asynchronních oznámení. Budete muset rozbalit Connection
objekt z vašeho fondu připojení, abyste mohli přetypovat základní připojení do PgConnection
používat poslouchat/upozorňovat s. Viz související odpověď
Bit producent/spotřebitel bude těžší. Chcete-li mít v PostgreSQL několik souběžných uživatelů bezpečných při zhroucení, musíte použít poradní zamykání pomocí pg_try_advisory_lock(...)
. Pokud nepotřebujete souběžné spotřebitele, je to snadné, stačí SELECT ... LIMIT 1 FOR UPDATE
po řadě.
Doufejme, že 9.4 bude obsahovat jednodušší metodu přeskakování zamčených řádků pomocí FOR UPDATE
, protože je na tom práce ve vývoji.