feat(server): configurable DB pool size via --db-max-connections/DB_MAX_CONNECTIONS (#2)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-04 21:46:41 +02:00
parent 7e235ffd3e
commit 7181437625
4 changed files with 16 additions and 6 deletions
+4 -3
View File
@@ -17,10 +17,11 @@ pub struct Db {
}
impl Db {
/// Connect to the database at `database_url`, opening a connection pool.
pub async fn connect(database_url: &str) -> Result<Self, sqlx::Error> {
/// Connect to the database at `database_url`, opening a connection pool with at most
/// `max_connections` connections.
pub async fn connect(database_url: &str, max_connections: u32) -> Result<Self, sqlx::Error> {
let pool = PgPoolOptions::new()
.max_connections(5)
.max_connections(max_connections)
.connect(database_url)
.await?;
+8
View File
@@ -42,4 +42,12 @@ pub struct Config {
/// Meilisearch index name for catalogue objects.
#[arg(long = "meili-index", env = "MEILI_INDEX", default_value = "objects")]
pub meili_index: String,
/// Maximum size of the PostgreSQL connection pool.
#[arg(
long = "db-max-connections",
env = "DB_MAX_CONNECTIONS",
default_value_t = 5
)]
pub db_max_connections: u32,
}
+3 -2
View File
@@ -15,7 +15,7 @@ use tokio::net::TcpListener;
/// Connect dependencies from `config` and serve until shutdown.
pub async fn run(config: Config) -> anyhow::Result<()> {
let db = Db::connect(&config.database_url)
let db = Db::connect(&config.database_url, config.db_max_connections)
.await
.context("connecting to the database")?;
@@ -136,7 +136,8 @@ pub async fn create_user(database_url: &str, email: &str, role: Role) -> anyhow:
auth::hash_password(&password).map_err(|err| anyhow::anyhow!("hashing password: {err}"))?
};
let db = Db::connect(database_url)
// CLI one-shot: a tiny pool is plenty.
let db = Db::connect(database_url, 2)
.await
.context("connecting to the database")?;
+1 -1
View File
@@ -9,7 +9,7 @@ use tokio::net::TcpListener;
async fn serves_health_live_over_tcp() {
let database_url =
std::env::var("DATABASE_URL").expect("DATABASE_URL must be set for this test");
let db = Db::connect(&database_url)
let db = Db::connect(&database_url, 2)
.await
.expect("connect to database");
let state = AppState {