-
Notifications
You must be signed in to change notification settings - Fork 521
Open
Description
I'm trying to start a transaction and return it for later usage but i get lifetime issues because the lifetime of the transaction is tied to the client/connection. Is there a proper way to do this? I've tried wrapping the Transaction in a struct, using Box and tokio Mutex but nothing seemed to help
see below pseudo code.
#[async_trait]
trait myTrait {
async fn start() -> Transaction {
let mut client = self.get().await.unwrap(); // Get the client from the pool
let mut transaction = client.transaction().await.unwrap();
// do some stuff with transaction
transaction
}
}using the following core libs
tokio = { version = "1.38", features = ["macros", "rt-multi-thread", "signal"] }
tokio-postgres = { version = "0.7", features = ["runtime", "array-impls"] }
tokio-postgres-rustls = "0.13"
bb8 = "0.9"
bb8-postgres = "0.9"
warp = "0.3"
async-trait = "0.1"
Activity
sfackler commentedon Mar 20, 2025
You'd need to structure your API so the client stays checked out of the pool until the transaction ends.
fredski02 commentedon Mar 20, 2025
You mean starting the transaction outside of my
fn start?sfackler commentedon Mar 20, 2025
That'd be one way to do it.