I'm using PostgreSQL's SKIP LOCKED... e.g.
DELETE FROM task_queue
WHERE id = (SELECT id FROM task_queue ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED)
RETURNING *
So in my interface... do I do:
@SqlUpdate("DELETE FROM task_queue "
+ "WHERE id = ( "
+ " SELECT id "
+ " FROM task_queue "
+ " ORDER BY id "
+ " LIMIT 1 "
+ " FOR UPDATE SKIP LOCKED "
+ ") "
+ "RETURNING *;")
Optional<Task> next();
or
@SqlQuery("DELETE FROM task_queue "
+ "WHERE id = ( "
+ " SELECT id "
+ " FROM task_queue "
+ " ORDER BY id "
+ " LIMIT 1 "
+ " FOR UPDATE SKIP LOCKED "
+ ") "
+ "RETURNING *;")
Optional<Task> next();
And yes, i'll suck it and see... but would really like the official guidance