// Just a version of the 'raw' sql (which may or may not be up // to date with what's in the sql.js file) for manual testing etc. WITH RECURSIVE candidate_job AS ( SELECT (j).*, pg_try_advisory_xact_lock((j).id) AS locked FROM ( SELECT j FROM job_snapshots AS j WHERE process_at <= now() ORDER BY process_at, id LIMIT 1 ) AS t1 UNION ALL ( SELECT (j).*, pg_try_advisory_xact_lock((j).id) AS locked FROM ( SELECT ( SELECT j FROM job_snapshots AS j WHERE process_at <= now() AND (process_at, id) > (candidate_job.process_at, candidate_job.id) ORDER BY process_at, id LIMIT 1 ) AS j FROM candidate_job WHERE NOT candidate_job.locked LIMIT 1 ) AS t1 ) ) SELECT * FROM candidate_job where locked;