Welke andere oplossing heb ik voor dit probleem?
Gebruik LISTEN en NOTIFY om uw app te vertellen dat er dingen zijn veranderd.
U kunt de NOTIFY van een trigger die ook wijzigingen registreert in een wachtrijtabel.
Je hebt een PgJDBC-verbinding nodig die een LISTEN . heeft verzonden voor de gebeurtenis(sen) die u gebruikt. Het moet de database pollen door periodieke lege query's te verzenden ("" ) als u SSL gebruikt; als u geen SSL gebruikt, kan dit worden voorkomen door gebruik te maken van de asynchrone meldingscontroles. U moet de Connection uitpakken object uit uw verbindingspool om de onderliggende verbinding te kunnen casten naar een PgConnection om mee te luisteren/melden. Zie gerelateerd antwoord
De producent/consument-bit zal moeilijker zijn. Om meerdere crashveilige gelijktijdige consumenten in PostgreSQL te hebben, moet u adviserende vergrendeling gebruiken met pg_try_advisory_lock(...) . Als u geen gelijktijdige consumenten nodig heeft, is het eenvoudig, u SELECT ... LIMIT 1 FOR UPDATE een rij tegelijk.
Hopelijk bevat 9.4 een eenvoudigere methode om vergrendelde rijen over te slaan met FOR UPDATE , want er is werk aan de winkel.