этом)
если доставать коннект явно - проблема та же
let mut conn = db_pool.acquire().await?;
let mut tx = conn.begin().await?;
а если у пула задать max_connections = 1, то второй запрос вообще не вызывается. дичь
после второй строчки второй коннект создается? Или в первой строчке два коннекта?
логи пг: postgres_1 | 2021-07-14 13:03:24.536 UTC [433] LOG: statement: /* SQLx ping */ postgres_1 | 2021-07-14 13:03:24.539 UTC [435] LOG: statement: BEGIN postgres_1 | 2021-07-14 13:03:24.542 UTC [435] LOG: execute sqlx_s_1: DELETE FROM foo_table postgres_1 | 2021-07-14 13:03:24.542 UTC [435] DETAIL: parameters: $1 = '1', $2 = '1' postgres_1 | 2021-07-14 13:03:24.545 UTC [433] LOG: statement: /* SQLx ping */ postgres_1 | 2021-07-14 13:03:24.547 UTC [433] LOG: execute sqlx_s_2: INSERT INTO foo_table... postgres_1 | 2021-07-14 13:03:24.547 UTC [433] DETAIL: parameters: $1 = '1', $2 = '1', $3 = '{qwdwqdw}'
в общем, пошел ишью заводить
смотри, у тебя же брейкпоинты работают? Ставишь бряк на 0 строчку, параллельно на втором окне открываешь пг. И дальше по каждой строчке step over и что кажут коннекты постгри
а разница, что это даст?) видно по логам, что второй запрос делается в рамках коннекта, созданного до вызова begin (см pid у каждой записи в логе)
ну я бы попробовал понять в какой момент конкретно коннекет создается. Может ли быть такое что db_pool.begin() создает > 1 коннекта? Или он создается в execute? PID запроса с insert численно меньше чем delete который раньше сделан - если пиды растут линейно то получается что коннект уже был на момент вызова insert
как я и сказал выше, по логам видно, что коннект был создан до вызова begin
Обсуждают сегодня