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.