store: Fix: SQLite PRAGMA foreign_keys is per-connection, not per-pool

This commit is contained in:
Cal Corum 2026-02-28 10:53:04 -06:00
parent 5e6fc62ead
commit e2154e61bd

View File

@ -0,0 +1,38 @@
---
id: 49a8001d-b3b9-4a29-911a-956db4b37f21
type: fix
title: "Fix: SQLite PRAGMA foreign_keys is per-connection, not per-pool"
tags: [sba-scout, rust, sqlx, sqlite, fix, pragma, connection-pool]
importance: 0.7
confidence: 0.8
created: "2026-02-28T16:53:04.445263+00:00"
updated: "2026-02-28T16:53:04.445263+00:00"
---
# SQLite PRAGMA Scope with sqlx Connection Pools
**Project:** sba-scout (Rust)
## Problem
When using sqlx connection pools, `PRAGMA` statements only affect the specific connection they run on. Running `PRAGMA foreign_keys = OFF` via `pool.execute()` may use a different connection than subsequent queries — so FK enforcement remains on for those queries.
## Fix
Use `SqliteConnectOptions::foreign_keys(false)` to apply the setting to **every** connection the pool creates, not just whichever one happens to handle the PRAGMA execute call.
```rust
let opts = SqliteConnectOptions::from_str(&db_url)?
.foreign_keys(false)
.create_if_missing(true);
let pool = SqlitePool::connect_with(opts).await?;
```
## Context
For sba-scout, FK enforcement was disabled entirely because transactions reference players/teams that may not exist locally (data arrives out of order from the API).
## General Rule
Any SQLite session-level setting (PRAGMA) must be applied at the connection options level when using a pool, not via a one-off `execute()` call.