На основании дальнейшего тестирования @Werner определил, что код накапливал подготовленные операторы на стороне сервера.
Неясно, можно ли закрыть эти операторы с помощью этой библиотеки.
Чтобы избежать этой проблемы, можно использовать два подхода:
- Используйте один общий подготовленный оператор
- Используйте форму прямого запроса вместо подготовленного оператора
Я принципиально рекомендую первый подход, так как он более эффективен и защищает от SQL инъекции. Он должен выглядеть примерно так:
async fn hellow_world(a : f32, b : f32, pool: &Pool) -> Result<Value, PoolError> {
let client: Client = pool.get().await?;
let stmt = client.prepare("select \"json\" from public.table_a WHERE a=$1::numeric and b=$2::numeric").await?;
let row = client.query_one(&stmt, &[&a, &b]).await?;
let result : Value = row.get(0);
Ok(result)
}
Используя этот код, для каждого соединения пула должен быть создан только один подготовленный оператор.