Как pgbouncer заботится о параметрах сеанса в режиме пула транзакций
Я подключаюсь к Postgresql через JDBC через pgbouncer с включенным режимом пула транзакций. Насколько я знаю, в этом режиме pgbouncer может совместно использовать одно соединение для нескольких клиентов, не прерывая сеанс. Таким образом, несколько клиентов могут работать в одном сеансе последовательно, один за другим. Вопрос в том, заботится ли pgbouncer о сбросе параметров сеанса, когда он отсоединяет одного клиента от соединения и присоединяет другого клиента к этому соединению?
В частности, мое приложение получает соединение, а затем выдает что-то вроде этого:
executeQuery(connection,"select set_config('myapp.user','fonar101',false)");
..../*other actions*/
commit(connection);
После коммита pgbouncer может отсоединить мое приложение от соединения и вернуть его в свой пул, верно? Так,
- если я выполню другие операторы после коммита, они, вероятно, будут выполнены в другом сеансе с неверными значениями параметров сеанса
- pgbouncer может подключить другого клиента к этому соединению, и этот клиент снова будет использовать неверные настройки сеанса
Как pgbouncer заботится об этих вещах?
2 ответа
Я бы сказал обратное:
https://pgbouncer.github.io/config.html
сделка
Сервер возвращается в пул после завершения транзакции.
Что означает, что когда ты SET SESSION
(по умолчанию для SET), без указания SET LOCAL
, вы меняете настройки для всех транзакций, которые разделяют сеанс в пуле...
Согласно документации pgbouncer, он не поддерживает SET/RESET и ON COMMIT DROP для временных таблиц в режиме пула транзакций.