Expand description
§pg-queue
PostgreSQL-based job queue, pub/sub, and cache — a Redis replacement.
- Queues: SKIP LOCKED for concurrent job processing
- Pub/Sub: LISTEN/NOTIFY for real-time messaging
- Cache: UNLOGGED tables with per-query TTL checks
- Request-Response: RPC over PostgreSQL with correlation IDs
§Setup
Run migrations/setup.sql against your database, then create queues:
SELECT pg_queue_create_queue('emails');
SELECT pg_queue_create_queue('jobs');§Usage
use pg_queue::{PgQueueManager, QueueName};
let pool = sqlx::PgPool::connect("postgres://localhost/mydb").await.unwrap();
let mgr = PgQueueManager::new(pool);
let emails = QueueName::new("emails")?;
// Push a job
mgr.queue.push(&emails, &serde_json::json!({"to": "user@example.com"})).await?;
// Pop and process
if let Some(job) = mgr.queue.pop::<serde_json::Value>(&emails).await? {
println!("Processing job {}: {:?}", job.id, job.payload);
mgr.queue.complete(&emails, job.id).await?;
}Re-exports§
pub use cache::CacheRepository;pub use errors::PgQueueError;pub use errors::Result;pub use listen::ListenerService;pub use listen::Notification;pub use notify::NotifyService;pub use queue::Job;pub use queue::JobStatus;pub use queue::QueueName;pub use queue::QueueRepository;pub use request_response::RequestResponseService;pub use request_response::RequestWrapper;
Modules§
Structs§
- PgQueue
Manager - Main manager combining all PostgreSQL queue/pubsub/cache functionality