River
A PostgreSQL job framework with a shared format across language clients.
View pinned source / version 86f19649c873 · Repository latest-release endpoint currently returns a Ruby package release; Go module latest was verified separately. Current docs cover multiple languages and SQLite as well as PostgreSQL. Benchmark adapter Go version is separate.
What this system is built around
A PostgreSQL job framework with a shared format across language clients.
Useful when a PostgreSQL job lifecycle and transactional application integration are central; current clients share a cross-language job format. The repository benchmark measures the Go adapter, not every language implementation.
Editorial fit, based on the cited design. Verify against your workload.Semantics & operating model
Concise claims with their scope intact. “Not verified” means this review did not establish the answer.
Claiming & concurrency
DocumentedPostgreSQL claims use FOR UPDATE SKIP LOCKED; OSS clients set per-queue worker counts. Cluster-wide concurrency controls are a Pro feature.
Transactional enqueue
DocumentedInsertTx can commit a job atomically with application changes in the same PostgreSQL transaction. Go also supports JobCompleteTx for completion plus local writes; this does not cover external side effects.
Crash recovery & retries
DocumentedOrdinary workers execute at least once; failed completion persistence or a process crash may cause another execution. Retry policy is configurable with a finite attempt budget.
Delayed & recurring work
DocumentedDelayed jobs and periodic/cron insertion are available. OSS periodic schedules are held in leader memory and reset across restarts/elections; durable periodic schedules are Pro.
Uniqueness / deduplication
DocumentedUnique jobs use a partial unique index and selected argument, kind, period, queue and state dimensions. Uniqueness controls insertion, not exactly-once execution.
Postgres extension required
Not requiredThe reviewed PostgreSQL runtime uses schema migrations and standard SQL tables/functions, rather than a dedicated queue extension.
Operator interface
DocumentedRiver UI has an official open-source base variant; the Pro UI requires River Pro.
Tradeoffs to carry into a test
At-least-once execution means an external operation still needs duplicate-safe handling.
Recovery and retries Recovery and retriesGo timeouts rely on context cooperation.
Recovery and retries Recovery and retriesDistinguish OSS worker limits and in-memory periodic schedules from their Pro counterparts.
Scheduling SchedulingLanguage implementations share a schema/protocol but do not have identical APIs or verified full mixed-language runtime coverage. Ruby currently lacks transactional job completion; its docs recommend thread-based production workers rather than Ractors. Java exists as a separate prerelease and is outside this profile.
Add language-client scope qualification Add language-client scope qualification Add language-client scope qualification Add language-client scope qualification