Hvilken anden løsning har jeg til dette problem?
Brug LISTEN
og NOTIFY
for at fortælle din app, at tingene har ændret sig.
Du kan sende NOTIFY
fra en trigger, der også registrerer ændringer i en køtabel.
Du skal bruge en PgJDBC-forbindelse, der har sendt en LISTEN
for den eller de begivenheder, du bruger. Den skal polle databasen ved at sende periodiske tomme forespørgsler (""
) hvis du bruger SSL; Hvis du ikke bruger SSL, kan dette undgås ved at bruge kontrol af asynkrone notifikationer. Du skal pakke Connection
ud objekt fra din forbindelsespulje for at kunne caste den underliggende forbindelse til en PgConnection
at bruge lyt/notificere med. Se relateret svar
Producent/forbruger-bitten bliver sværere. For at have flere nedbrudssikre samtidige forbrugere i PostgreSQL skal du bruge rådgivende låsning med pg_try_advisory_lock(...)
. Hvis du ikke har brug for samtidige forbrugere, så er det nemt, du skal bare SELECT ... LIMIT 1 FOR UPDATE
en række ad gangen.
Forhåbentlig vil 9.4 inkludere en nemmere metode til at springe låste rækker over med FOR UPDATE
, da der er arbejde i udvikling for det.