Skip to content

rust.sqlx.missing_pool_timeout

Stability Medium

Detects SQLx pool configuration without connection timeout.

Without pool timeouts:

  • Hanging requests — Waiting for connections that never come
  • Connection starvation — Pool exhaustion blocks all queries
  • Cascade failures — Database issues spread to your service
  • No feedback — Can’t tell why things are slow

Pool timeouts provide fail-fast behavior and observability.

// ❌ Before
let pool = PgPoolOptions::new()
.max_connections(5)
.connect("postgres://...")
.await?;
// ✅ After
use std::time::Duration;
let pool = PgPoolOptions::new()
.max_connections(5)
.acquire_timeout(Duration::from_secs(3))
.connect("postgres://...")
.await?;
  • PgPoolOptions without acquire_timeout
  • Missing connection timeout
  • Pool without max connections set

Unfault adds acquire_timeout(Duration::from_secs(3)) to pool options.

use sqlx::postgres::PgPoolOptions;
use std::time::Duration;
let pool = PgPoolOptions::new()
// Connection limits
.max_connections(10)
.min_connections(2)
// Timeouts
.acquire_timeout(Duration::from_secs(3))
.idle_timeout(Duration::from_secs(600))
.max_lifetime(Duration::from_secs(1800))
// Connection testing
.test_before_acquire(true)
.connect(&database_url)
.await?;
SettingPurposeSuggested Value
acquire_timeoutWait for connection from pool3-5 seconds
idle_timeoutClose unused connections10 minutes
max_lifetimeRecycle connections30 minutes