Как pgbouncer заботится о параметрах сеанса в режиме пула транзакций

Я подключаюсь к Postgresql через JDBC через pgbouncer с включенным режимом пула транзакций. Насколько я знаю, в этом режиме pgbouncer может совместно использовать одно соединение для нескольких клиентов, не прерывая сеанс. Таким образом, несколько клиентов могут работать в одном сеансе последовательно, один за другим. Вопрос в том, заботится ли pgbouncer о сбросе параметров сеанса, когда он отсоединяет одного клиента от соединения и присоединяет другого клиента к этому соединению?

В частности, мое приложение получает соединение, а затем выдает что-то вроде этого:

executeQuery(connection,"select set_config('myapp.user','fonar101',false)");
..../*other actions*/
commit(connection); 

После коммита pgbouncer может отсоединить мое приложение от соединения и вернуть его в свой пул, верно? Так,

  1. если я выполню другие операторы после коммита, они, вероятно, будут выполнены в другом сеансе с неверными значениями параметров сеанса
  2. pgbouncer может подключить другого клиента к этому соединению, и этот клиент снова будет использовать неверные настройки сеанса

Как pgbouncer заботится об этих вещах?

2 ответа

Я бы сказал обратное:

https://pgbouncer.github.io/config.html

сделка

Сервер возвращается в пул после завершения транзакции.

Что означает, что когда ты SET SESSION (по умолчанию для SET), без указания SET LOCAL, вы меняете настройки для всех транзакций, которые разделяют сеанс в пуле...

Согласно документации pgbouncer, он не поддерживает SET/RESET и ON COMMIT DROP для временных таблиц в режиме пула транзакций.

Другие вопросы по тегам