Журнал изменений
PgBouncer 1.25.x
2026-05-08 - PgBouncer 1.25.2 - «Человеческое прикосновение и новый поворот в полной неопределённости борьбе за титул»
Безопасность
- Исправлена CVE-2026-6664: целочисленное переполнение в коде разбора сетевых пакетов в PgBouncer до 1.25.2 позволяло обойти проверку границ и могло привести к аварийному завершению. Неаутентифицированный удалённый злоумышленник мог вывести PgBouncer из строя некорректным пакетом аутентификации SCRAM.
- Исправлена CVE-2026-6665: код SCRAM в PgBouncer до 1.25.2 неверно проверял
возвращаемое значение
strlcat()при построении содержимого SCRAM client-final-message. Злонамеренный бэкенд, отправивший SCRAM server-final-message с длинным nonce, мог вызвать переполнение стека. - Исправлена CVE-2026-6666: возможное обращение по нулевому указателю в PgBouncer до 1.25.2 могло привести к аварийному завершению, если сервер отправлял ответ об ошибке без поля SQLSTATE.
- Исправлена CVE-2026-6667: PgBouncer до 1.25.2 не выполнял надлежащую проверку
авторизации для административной команды
KILL_CLIENT. Её могли выполнять все пользователи с доступом к административной консоли, хотя сама консоль требует авторизации. Команда должна быть разрешена только пользователям, перечисленным в параметреadmin_users.
Исправления
- Уточнена документация параметра
default_pool_size. - Исправлена документация
client_tls13_ciphersиserver_tls13_ciphers.
- Уточнена документация параметра
2025-12-03 - PgBouncer 1.25.1 - «Исправляем множество ошибок перед Рождеством»
Безопасность
Исправлена CVE-2025-12819: до этого выпуска неаутентифицированный злоумышленник мог выполнить произвольный SQL во время аутентификации, передав вредоносный параметр search_path в StartupMessage. Уязвимы системы, в которых одновременно выполнены ВСЕ следующие условия:
track_extra_parametersвключает search_path (нестандартная конфигурация, вероятно, применяемая только в установках с Citus или PostgreSQL 18)auth_userсодержит непустую строку (нестандартная конфигурация)auth_queryнастроен без полностью квалифицированных имён объектов (стандартная конфигурация, оператор < не квалифицирован схемой)
Исправления
- Исправлены ошибки специальной аутентификации SCRAM после переподключения к серверу (#1432 , появились в 1.25.0)
- Добавлены отсутствовавшие typedef для экзотических архитектур без поддержки SIMD (#1414 , появились в 1.25.0)
- Удалено шумное предупреждение, когда клиент закрывает соединение до отправки данных (#1420 , появилось в 1.25.0)
- Предотвращено потенциальное разыменование указателя NULL (#1423 , появилось в 1.25.0)
- Исправлена потенциальная утечка памяти (#1422 , появилась в 1.25.0)
- Исправлен разбор серверных сообщений SCRAM (#1431 , появился в 1.25.0)
2025-11-09 - PgBouncer 1.25.0 - «Тот самый выпуск с поддержкой LDAP»
- Возможности
- Добавлена аутентификация LDAP! Её можно настроить с помощью файла HBA или
auth_ldap_options. (#731 ) - Добавлена поддержка прямых TLS-соединений на стороне клиента. Клиенты могут использовать ускоренное установление TLS-соединения, появившееся в PostgreSQL 17. PgBouncer пока не может подключаться к серверам PostgreSQL таким ускоренным способом. (#1359 )
- В
SHOW CLIENTSдобавлено состояние idle. (#1191 ) - Добавлен параметр
transaction_timeout— глобальный и на уровне пользователя. (#1242 ) - Клиенту отправляется сообщение NOTICE, если он находится в очереди без соединения более 5 секунд. Длительность можно изменить или отключить через
query_wait_notify. (#1264 ) - Добавлен параметр
scram_iterations, позволяющий операторам выбирать компромисс между безопасностью и скоростью аутентификации. (#1339 ) - Добавлены
client_tls13_ciphersиserver_tls13_ciphersдля выбора включаемых наборов шифров TLSv1.3. (#1352 )
- Добавлена аутентификация LDAP! Её можно настроить с помощью файла HBA или
- Изменения
- Значительно повышена производительность специальной аутентификации SCRAM. (#1338 )
- Команду
KILLможно вызывать без базы данных, что теперь означаетKILLдля всех баз. (#1317 ) - Запрос проверки работоспособности по умолчанию отправляет пустой запрос вместо
SELECT 1. (#1233 ) - Переполнение очереди PAM записывается как предупреждение, что упрощает поиск причины вызванных им медленных запросов. (#1297 )
- Команда
RELOADтеперь сообщает обо всех ошибках во время перезагрузки. (#1231 ) - Во время завершения работы административным соединениям разрешён доступ к UNIX-сокету PgBouncer. Оператору проще выяснить, почему процесс PgBouncer не завершается, и вручную выполнить
KILL_CLIENTдля зависших соединений. (#1305 ) mkauth.pyбольше не добавляет устаревшее третье поле. (#1365 )- Улучшены сообщения
FATALв функцияхdisconnect_clientиdisconnect_server. (#1382 ) - Прекращено использование устаревшей функции OpenSSL
EVP_PKEY_get0_EC_KEY, способной вызывать проблемы в некоторых реализациях FIPS. (#1384 )
- Исправления
- Исправлено аварийное завершение при паролях длиной 1024 символа и более. (#1215 )
- Исправлены соединения с несколькими узлами при
server_tls_sslmode=verify-full. (#1303 ) - Исправлена редкая ошибка
FATALпри передаче запросов отмены. (#1383 ) - Исправлена сортировка параметров в
SHOW CONFIG. (#1403 ) - Усилен разбор пакета запуска. (#1407 )
PgBouncer 1.24.x
2025-04-16 - PgBouncer 1.24.1 - «CVE-2025-2291: VALID UNTIL было вчера»
Безопасность
- Исправлена CVE-2025-2291: ранее PgBouncer не учитывал VALID UNTIL пароля пользователя при запросе хешей паролей через auth_query. Если PgBouncer использовался как прозрачный прокси перед Postgres, он мог разрешать уже просроченные пароли. Для устранения проблемы запрос auth_query по умолчанию и примеры пользовательских функций auth_query в документации изменены так, чтобы учитывать VALID UNTIL. Если используется пользовательский auth_query, его следует обновить. При стандартном auth_query можно обновиться до PgBouncer 1.24.1 или в предыдущем выпуске изменить конфигурацию, указав новый запрос auth_query по умолчанию.
Исправления
- Исправлена поддержка PAM: поддержка аутентификации
pamв файле HBA отменена. (#1291 ) (ошибка появилась в 1.24.0) - Исправлена ошибка уменьшения счётчика соединений пользователя. Исправление присутствовало в теге 1.24.0 на GitHub, но отсутствовало в архиве выпуска. (#1238 ) (ошибка появилась в 1.24.0)
test_load_balance_hosts.pyдобавлен в архив выпуска. (#1282 )- Исправлены тесты для запуска сборщиками пакетов Debian. (#1266 , #1250 )
- Исправлена поддержка PAM: поддержка аутентификации
Документация
- Пример
auth_queryобновлён для задания безопасногоsearch_path. (#1245 )
- Пример
2025-01-10 - PgBouncer 1.24.0 - «Новый год, новый баунсер»
Возможности
- Добавлена поддержка
Type=notify-reloadдля systemd. Требуется systemd версии 253 или новее. (#1148 ) - В административную консоль добавлена команда
KILL_CLIENTдля принудительного завершения клиентского соединения. (#1147 ) - Добавлен параметр
max_user_client_connections— глобальный и на уровне пользователя. (#1137 ) - Добавлен параметр
max_db_client_connections— глобальный и на уровне базы данных. (#1138 ) - В вывод
SHOW USERSиSHOW DATABASESдобавлен счётчикcurrent_client_connections. (#1137 , #1138 ) - Добавлен параметр
load_balance_hosts, позволяющий не балансировать нагрузку между узлами. (#736 ) - В
SHOW STATSдоступны счётчики использования подготовленных операторов. (#1192 ) - Добавлен параметр
client_idle_timeout. (#1189 ) - Добавлены пользовательские
query_timeoutиreserve_pool_size. (#1180 , #1228 ) - В файле HBA включена поддержка аутентификации
pam. (#326 )
- Добавлена поддержка
Изменения
- Соединения не пересоздаются при RELOAD, если конфигурация TLS не изменилась. Ранее все соединения TLS пересоздавались при RELOAD, что могло вызвать временное, но серьёзное падение производительности. Теперь это происходит только при фактическом изменении параметров TLS. (#1157 )
- Поддержка подготовленных операторов включена по умолчанию:
max_prepared_statementsтеперь равен 200. Изменение должно затронуть только клиентов, действительно использующих подготовленные операторы. Таким клиентам рекомендуется изучить ограничения поддержки в документации . (#1144 ) - Сокеты, клиенты и серверы в административном выводе теперь имеют уникальный ID. Раньше их определяли по указателям, которые после отключения часто повторно использовались новыми клиентами. (#1172 )
- Сообщение об ошибке пустого pidfile стало понятнее. (#1195 )
- При ошибке
server_login_retryклиенту возвращается исходная ошибка. (#1152 ) - При ошибке
auth_queryисходная ошибка сервера записывается в журнал. (#1187 ) - Значение
default_pool_size0 означает неограниченный размер. (#1227 ) - Параметр базы данных
reserve_poolпереименован вreserve_pool_size. Прежнее имя остаётся его псевдонимом. (#1232 )
Исправления
- Улучшена обработка различных маловероятных ошибок, например OOM, которые раньше могли приводить к аварийному завершению или утечке памяти. (#1108 , #1101 , #1099 , #1169 , #1202 )
- Исправлено значение
server_tls_sslmodeпо умолчанию в примере файла конфигурации. (#1133 ) - Из документации удалено упоминание недопустимого псевдонима
server_tls_protocols. (#1155 ) - Исправлена ошибка совместного использования
auth_queryи соединений репликации, вызывавшая сбои соединений. (#1166 ) - Запросы отмены клиентов игнорируются, пока PgBouncer настраивает параметры сервера. (#298 )
PgBouncer 1.23.x
2024-08-02 - PgBouncer 1.23.1 - «Всё снова приведено в порядок»
- Исправления
- Исправлена возможная ошибка сегментации после перезагрузки конфигурации PgBouncer. ([#1105]) (ошибка появилась в 1.23.0)
- Исправлены все известные аварийные завершения в put_in_order. ([#1120]) (новые ошибки были введены в версии 1.23.0)
- В архив выпуска добавлены отсутствовавшие файлы, необходимые для тестирования. ([#1124]) (файлы отсутствовали начиная с 1.23.0) [#1120]: https://github.com/pgbouncer/pgbouncer/pull/1120 [#1105]: https://github.com/pgbouncer/pgbouncer/pull/1105 [#1124]: https://github.com/pgbouncer/pgbouncer/pull/1124 2024-07-03 - PgBouncer 1.23.0 - «К новым начинаниям»
- Возможности
- Добавлена поддержка поэтапных перезапусков. SIGTERM больше не вызывает немедленное завершение процесса PgBouncer. Теперь выполняется «сверхбезопасное завершение»: процесс ждёт отключения всех клиентов. Новое поведение SIGTERM позволяет поэтапно перезапускать несколько процессов PgBouncer за балансировщиком нагрузки или на одном порту с
so_reuseport. Это незначительное нарушение обратной совместимости. Если Dockerfile или служба Systemd рассчитывали на прежнее поведение SIGTERM, теперь следует использовать SIGQUIT. ([#902]) - Добавлена поддержка карт пользовательских имен для методов аутентификации
certиpeer. Эта функция предоставляет гибкость, так как пользователь, инициирующий соединение, не обязательно должен быть пользователем базы данных. Поддержка PgBouncer для карт пользовательских имен работает очень похоже на postgres, с исключениями, описанными в документации. ([#996]) - Добавлена поддержка репликационных соединений через PgBouncer. ([#876])
- Добавлена поддержка поэтапных перезапусков. SIGTERM больше не вызывает немедленное завершение процесса PgBouncer. Теперь выполняется «сверхбезопасное завершение»: процесс ждёт отключения всех клиентов. Новое поведение SIGTERM позволяет поэтапно перезапускать несколько процессов PgBouncer за балансировщиком нагрузки или на одном порту с
- Изменения
- Улучшен список соединений в выводе
SHOW USERS. ([#1040]) - Разрешена настройка
pool_sizeна уровне пользователя. ([#1049]) - Разрешена настройка
server_lifetimeна уровне базы данных. ([#1057]) - Добавлена поддержка вывода динамически созданных пользователей в выводе
SHOW USERS. ([#1052]) - Добавлена поддержка типа адреса
allв конфигурации HBA. ([#1078]) - Добавлена поддержка автоматического перезапуска при использовании systemd. ([#1080])
- Минимальная требуемая версия c-ares повышена до 1.9.0 ([#1076])
- Улучшен список соединений в выводе
- Исправления
- Исправлены проблемы с обработкой больших и частичных пакетов при старте. ([#1058])
- Добавлена поддержка формата
--config=valueв параметре startup-опции. ([#1064]) - Исправлен расчет метрики
avg_wait_time. ([#727]) - Добавлена поддержка переговоров о версии протокола PostgreSQL с клиентом. ([#1007])
- Добавлено отслеживание ожидающего запроса
auth_query. ([#1034]) - Улучшения документации и CI. [#996]: https://github.com/pgbouncer/pgbouncer/pull/996 [#1040]: https://github.com/pgbouncer/pgbouncer/pull/1040 [#1049]: https://github.com/pgbouncer/pgbouncer/pull/1049 [#1057]: https://github.com/pgbouncer/pgbouncer/pull/1057 [#1052]: https://github.com/pgbouncer/pgbouncer/pull/1052 [#1058]: https://github.com/pgbouncer/pgbouncer/pull/1058 [#1007]: https://github.com/pgbouncer/pgbouncer/pull/1007 [#876]: https://github.com/pgbouncer/pgbouncer/pull/876 [#902]: https://github.com/pgbouncer/pgbouncer/pull/902 [#1064]: https://github.com/pgbouncer/pgbouncer/pull/1064 [#1078]: https://github.com/pgbouncer/pgbouncer/pull/1078 [#1080]: https://github.com/pgbouncer/pgbouncer/pull/1080 [#727]: https://github.com/pgbouncer/pgbouncer/pull/727 [#1076]: https://github.com/pgbouncer/pgbouncer/pull/1076 [#1034]: https://github.com/pgbouncer/pgbouncer/pull/1034
PgBouncer 1.22.x
2024-03-04 - PgBouncer 1.22.1 - «В Бангалоре лето»
- Исправления
- Исправлены проблемы, вызванные некоторыми клиентами использованием запросов
COPY FROM STDIN. Такие запросы могли приводить к утечкам памяти, регрессиям производительности и неправильному поведению подготовленных операторов. ([#1025]) (ошибка появилась в 1.21.0) - В архив выпуска добавлены отсутствовавшие тесты ([#1026]) (пропущенные тесты были добавлены в версиях 1.19.0 и 1.21.0) [#1025]: https://github.com/pgbouncer/pgbouncer/pull/1025 [#1026]: https://github.com/pgbouncer/pgbouncer/pull/1026 2024-01-31 - PgBouncer 1.22.0 - «DEALLOCATE ALL»
- Исправлены проблемы, вызванные некоторыми клиентами использованием запросов
- Возможности
- Добавлена поддержка
DEALLOCATE ALLиDISCARD ALLпри установкеmax_prepared_statementsв значение, отличное от нуля (стандартная поддержкаDEALLOCATEвсе еще не поддерживается) ([#972]) - Добавлена настройка
auth_queryна уровне базы данных. ([#979])
- Добавлена поддержка
- Изменения
- Улучшены настройки в рекомендуемом файле systemd ([#983])
- Логика быстрого отказа теперь обрабатывает все ситуации, когда рабочих соединений с базой данных больше нет и установить новые невозможно. ([#998])
- Внесены многочисленные улучшения документации.
- Исправления
- Исправлена проблема в PG14+, из-за которой PgBouncer отправлял
SET DateStyle='ISO'для каждой транзакции. ([#879]) - Исправлена обработка пустого
application_name. ([#999]) - Исправлена сборка в Windows с OpenSSL 3.2.0. ([#1009]) [#972]: https://github.com/pgbouncer/pgbouncer/pull/972 [#979]: https://github.com/pgbouncer/pgbouncer/pull/979 [#983]: https://github.com/pgbouncer/pgbouncer/pull/983 [#998]: https://github.com/pgbouncer/pgbouncer/pull/998 [#879]: https://github.com/pgbouncer/pgbouncer/pull/879 [#999]: https://github.com/pgbouncer/pgbouncer/pull/999 [#1009]: https://github.com/pgbouncer/pgbouncer/pull/1009
- Исправлена проблема в PG14+, из-за которой PgBouncer отправлял
PgBouncer 1.21.x
2023-10-16 - PgBouncer 1.21.0 - «Тот самый выпуск с подготовленными операторами»
- Возможности
- Добавлена поддержка именованных подготовленных операторов на уровне протокола! Вероятно,
это одна из самых востребованных возможностей PgBouncer. Использование подготовленных операторов
вместе с PgBouncer позволяет значительно снизить нагрузку на CPU системы — как со стороны
PgBouncer, так и со стороны PostgreSQL. В синтетических тестах эта возможность повышала
пропускную способность запросов от 15% до 250% в зависимости от нагрузки. Чтобы воспользоваться
ею, необходимо установить для нового параметра
max_prepared_statementsненулевое значение (точное значение зависит от нагрузки, но 100, вероятно, будет разумным). Подробнее о работе, ограничениях и настройке этой возможности см. в документации поmax_prepared_statements. После этого следует убедиться, что клиентская библиотека действительно использует подготовленные операторы. Способ их включения зависит от конкретного клиента, поэтому обратитесь к его документации. Перед выпуском возможность была тщательно протестирована, однако из-за её сложности всё ещё возможны проблемы с производительностью или ошибки. Сообщайте о найденных проблемах. ([#845])
- Добавлена поддержка именованных подготовленных операторов на уровне протокола! Вероятно,
это одна из самых востребованных возможностей PgBouncer. Использование подготовленных операторов
вместе с PgBouncer позволяет значительно снизить нагрузку на CPU системы — как со стороны
PgBouncer, так и со стороны PostgreSQL. В синтетических тестах эта возможность повышала
пропускную способность запросов от 15% до 250% в зависимости от нагрузки. Чтобы воспользоваться
ею, необходимо установить для нового параметра
- Изменения
- Повышена безопасность параметров OpenSSL: прежние значения по умолчанию были крайне устаревшими. Теперь они совпадают со стандартными значениями OpenSSL в системе, где работает PgBouncer. ([#948] & [libusual/#41])
- PgBouncer теперь использует OpenSSL для вычисления MD5-хешей, когда это возможно. Это необходимо для использования PgBouncer в FIPS-совместимом режиме. ([#949])
min_pool_sizeподдерживается для пулов с принудительным пользователем, даже если к PgBouncer не подключены клиенты. ([#947])- Изменено кодирование
peer_idв токене отмены. Поэтому одноранговое взаимодействие разных версий PgBouncer не работает, если версии находятся по разные стороны границы v1.21.0. ([#945])
- Исправления
- Исправлено аварийное завершение с сообщением: “FATAL in function client_proto(): bad client state: 6/7” ([#928]) (ошибка появилась в 1.18.0)
- Исправлено аварийное завершение с сообщением: “FATAL in function server_proto(): server in bad state: 11” ([#927]) (ошибка появилась в 1.18.0)
- Снижен уровень журналирования при отправке запросов отмены. ([#903])
- Исправлен префикс журнала slog для одноранговых узлов. ([#922])
- Исправлены опечатки в документации ([#932])
- Исправлены ошибки, выявленные статическим анализатором ([#943])
- При временных ошибках FATAL во время входа больше не отключаются все ожидающие клиенты. ([#946])
- Если база из
auth_dbnameне настроена явно, используется автоматически созданная база данных. ([#921])
- Внутренняя переработка
- Удалена поддержка библиотеки udns ([#938]) [#845]: https://github.com/pgbouncer/pgbouncer/pull/845 [#948]: https://github.com/pgbouncer/pgbouncer/pull/948 [#949]: https://github.com/pgbouncer/pgbouncer/pull/949 [#947]: https://github.com/pgbouncer/pgbouncer/pull/947 [#945]: https://github.com/pgbouncer/pgbouncer/pull/945 [#903]: https://github.com/pgbouncer/pgbouncer/pull/903 [#922]: https://github.com/pgbouncer/pgbouncer/pull/922 [#932]: https://github.com/pgbouncer/pgbouncer/pull/932 [#928]: https://github.com/pgbouncer/pgbouncer/pull/928 [#927]: https://github.com/pgbouncer/pgbouncer/pull/927 [#943]: https://github.com/pgbouncer/pgbouncer/pull/943 [#946]: https://github.com/pgbouncer/pgbouncer/pull/946 [#921]: https://github.com/pgbouncer/pgbouncer/pull/921 [#938]: https://github.com/pgbouncer/pgbouncer/pull/938 [libusual/#41]: https://github.com/libusual/libusual/pull/41
PgBouncer 1.20.x
2023-08-09 - PgBouncer 1.20.1 - «Необязательные опции»
- Исправления
- Исправлена ошибка, при которой включение
optionsвнутриignore_startup_parametersбольше не игнорировало неизвестные параметры внутри параметра запускаoptions. ([#908]) (ошибка была введена в версии 1.20.0) - Исправлена вводящая в заблуждение опечатка в документации. ([#917]) [#908]: https://github.com/pgbouncer/pgbouncer/pull/908 [#917]: https://github.com/pgbouncer/pgbouncer/pull/917 2023-07-20 - PgBouncer 1.20.0 - «Здесь должно быть забавное название»
- Исправлена ошибка, при которой включение
- Устаревшие функции
- Опция перезапуска без остановки обслуживания теперь считается устаревшей. Эта функция получила очень мало внимания в последние годы. У нее известны несколько проблем, и новые функции часто не поддерживают ее. Рекомендуемый метод для выполнения перезапусков без остановки обслуживания в настоящее время — использование функций
so_reuseportиpeers. Таким образом, вы можете запускать несколько различных процессов PgBouncer на одном порту. Затем, перезапуская эти процессы по одному, вы можете быть уверены, что всегда будет работать процесс PgBouncer на нужном порту. ([#894])
- Опция перезапуска без остановки обслуживания теперь считается устаревшей. Эта функция получила очень мало внимания в последние годы. У нее известны несколько проблем, и новые функции часто не поддерживают ее. Рекомендуемый метод для выполнения перезапусков без остановки обслуживания в настоящее время — использование функций
- Возможности
- Добавлен параметр
track_extra_parameters, позволяющий отслеживать больше параметров в транзакционном режиме пула. Ранее PgBouncer отслеживал толькоapplication_name,DateStyle,TimeZoneиstandard_conforming_strings. Теперь по умолчанию также отслеживаетсяIntervalStyle. Изменивtrack_extra_parameters, можно отслеживать дополнительные параметры, но только [те, о которых PostgreSQL сообщает клиенту][guc_report]. При использовании Citus 12.0+ Citus обеспечивает передачу PostgreSQL параметраsearch_pathклиенту. Поэтому при использовании Citus можно добавитьsearch_pathв параметрtrack_extra_parameters. ([#867]) - SQLSTATE передаётся на этапе аутентификации. Это позволяет Npgsql, поставщику данных .NET для PostgreSQL, обнаруживать отсутствие базы данных. ([#814])
- Значение
server_tls_sslmodeпо умолчанию изменено наprefer. ([#866]) - Добавлена поддержка стартового параметра
options. Это позволяет использовать [переменную окруженияPGOPTIONS, известнуюpsqlиlibpq][pgoptions]. С помощью этой переменной при запуске можно задать любой параметр PostgreSQL. Это работает только для параметров PostgreSQL, которые PgBouncer отслеживает черезtrack_extra_parameters. ([#878])
- Добавлен параметр
- Исправления
- Устранено аварийное завершение при использовании административной базы
pgbouncerкак auth_dbname. Это по-прежнему не поддерживается, но теперь вместо сбоя выдаётся понятная ошибка. ([#817]) - Исправлено имя
peer_cacheвSHOW MEM: раньше оно ошибочно отображалось какdb_cache. ([#864]) - Исправлена путаница исходного и целевого IP в журнале: PgBouncer записывал адрес источника вместо назначения. ([#880])
- Административные соединения через Unix-сокеты записываются в журнал только при
log_connectionsсо значением1. ([#883]) [guc_report]: https://www.postgresql.org/docs/15/protocol-flow.html#PROTOCOL-ASYNC [pgoptions]: https://www.postgresql.org/docs/current/config-setting.html#id-1.6.7.4.5 [#867]: https://github.com/pgbouncer/pgbouncer/pull/867 [#814]: https://github.com/pgbouncer/pgbouncer/pull/814 [#866]: https://github.com/pgbouncer/pgbouncer/pull/866 [#878]: https://github.com/pgbouncer/pgbouncer/pull/878 [#817]: https://github.com/pgbouncer/pgbouncer/pull/817 [#864]: https://github.com/pgbouncer/pgbouncer/pull/864 [#880]: https://github.com/pgbouncer/pgbouncer/pull/880 [#883]: https://github.com/pgbouncer/pgbouncer/pull/883 [#894]: https://github.com/pgbouncer/pgbouncer/pull/894
- Устранено аварийное завершение при использовании административной базы
PgBouncer 1.19.x
2023-05-31 - PgBouncer 1.19.1 - «Солнечная весна» Это небольшой выпуск, который исправляет несколько недавно появившихся ошибок.
- Исправления
- Исправлено: FATAL in function disconnect_client(): bad client state: 0 ([#846]) (ошибка была введена в версии 1.18.0)
- Исправлено: FATAL in function server_proto(): server in bad state: 14 ([#849]) (ошибка была введена в версии 1.18.0)
- В архив выпуска добавлены файлы, необходимые для тестов на Python. ([#852]) (тесты появились в 1.19.0) [#846]: https://github.com/pgbouncer/pgbouncer/pull/846 [#849]: https://github.com/pgbouncer/pgbouncer/pull/849 [#852]: https://github.com/pgbouncer/pgbouncer/pull/852 2023-05-04 - PgBouncer 1.19.0 - «Старомодный, ручной вид»
- Возможности
- Добавлен параметр
auth_dbname, задающий базу данных, в которой выполняетсяauth_query. ([#764]) - Добавлена команда
SHOW STATE, показывающая, находится ли PgBouncer в состоянии active, paused или suspended. ([#528]) - Добавлена поддержка однорангового взаимодействия процессов PgBouncer. Благодаря ей запросы отмены продолжают работать, когда несколько процессов PgBouncer находятся за одним балансировщиком нагрузки. ([#666])
- Добавлена специальная настройка
cancel_wait_timeout, которая определяет, через какое время прекращать попытки передачи запроса отмены. По умолчанию значение равно 10 секундам. ([#833]) - Добавлена новая среда тестирования. ([#792])
- Добавлен параметр
- Исправления
- Исправлена возможная утечка памяти при ошибке рукопожатия TLS. ([#796])
- Уточнены сообщения об ошибках для неподдерживаемых параметров командной строки в Windows. ([#620])
- Исправлена ошибка при вызове
disconnect_serverна сервере, находящемся в состоянииBEING_CANCELED. ([#815]) (введено в 1.18.0) - При получении
SIGTERMпроцесс больше не завершается с ненулевым статусом. ([#834]) - Запуск завершается ошибкой, если сокет в
unix_socket_dirсоздать невозможно. ([#830]) - Запуск завершается ошибкой, если невозможно прослушивать ни один адрес из
listen_addr. ([#838]) - При ошибке
sbuf_connectвыводятся более информативные предупреждения, особенно полезные при сбое создания Unix-сокетов. ([#837])
- Внутренняя переработка
- Различные обновления CI для улучшения производительности
- Удалена AppVeyor [#528]: https://github.com/pgbouncer/pgbouncer/issues/528 [#620]: https://github.com/pgbouncer/pgbouncer/pull/620 [#666]: https://github.com/pgbouncer/pgbouncer/pull/666 [#764]: https://github.com/pgbouncer/pgbouncer/pull/764 [#792]: https://github.com/pgbouncer/pgbouncer/pull/792 [#796]: https://github.com/pgbouncer/pgbouncer/pull/796 [#815]: https://github.com/pgbouncer/pgbouncer/pull/815 [#830]: https://github.com/pgbouncer/pgbouncer/pull/830 [#833]: https://github.com/pgbouncer/pgbouncer/pull/833 [#834]: https://github.com/pgbouncer/pgbouncer/pull/834 [#837]: https://github.com/pgbouncer/pgbouncer/pull/837 [#838]: https://github.com/pgbouncer/pgbouncer/pull/838
PgBouncer 1.18.x
2022-12-12 - PgBouncer 1.18.0 - «Никакой настоящей тайны»
- Возможности
- Исправления
- Операция
sbuf_send_pendingзавершается ошибкой, если целевой сокет закрыт (#652 ) - Исправлено несколько возможных сбоев (#700 , #730 )
- Исправлено переполнение при обработке списка узлов через запятую, из-за которого соединение перенаправлялось в Unix-сокет. (#747 )
- Соединения больше не удаляются ради достижения
min_pool_size(#648 ) - Исправлено
SHOW HELPс PostgreSQL 15 (#769 ) - Исправлено состояние гонки при обработке отмены запросов. Раньше отмена запроса одного клиента могла отменить запрос другого, если PgBouncer получал её после самостоятельного завершения целевого запроса. (#717 )
- Операция
- Внутренняя переработка
- Разные обновления CI
PgBouncer 1.17.x
2022-03-23 - PgBouncer 1.17.0 - «Черта проведена»
- Возможности
- Определение базы данных может включать список узлов через запятую. Соединения с ними устанавливаются циклически.
- При подключении к несуществующей базе ошибка (“no such database”) теперь сообщается после аутентификации. Это не позволяет неаутентифицированным клиентам выяснять, какие базы существуют. (Изменение аналогично переносу сообщения об отсутствующем пользователе после аутентификации в версии 1.15.0.)
- Ошибки отключения сервера не отправляются клиенту до входа. Это может раскрыть не совсем конфиденциальную информацию, такую как детали конфигурации, клиенту, который еще не вошел в систему.
- Максимальная длина пароля снова увеличена: предыдущего увеличения оказалось недостаточно.
- Удалена автоматическая перезагрузка
auth_file. Теперь файл конфигурацииauth_fileбудет перечитываться только при перезагрузке конфигурации, а не автоматически при любом изменении. - Теперь сборка для Windows включает файл ресурса с информацией о версии.
- Сборки для Windows, создаваемые на CI, теперь статически связанные, поэтому их можно использовать напрямую без необходимости в дополнительных зависимостях.
- Исправления
- Исправлена поддержка OpenSSL 3. Предыдущие выпуски могли вызывать сбой.
- Быстрый отказ больше не применяется при подключении. Это часть описанного выше переноса ошибок сервера после аутентификации. Изменение также исправляет сквозную аутентификацию SCRAM: клиентский обмен должен состояться, чтобы серверное соединение можно было исправить повторной аутентификацией. Сразу после аутентификации механизм быстрого отказа по-прежнему действует, поэтому в большинстве случаев наблюдаемое поведение не изменится.
- Параметр
auth_typeв образцеpgbouncer.iniизменён наmd5, чтобы соответствовать встроенному значению по умолчанию. Некоторые используют этот файл как основной конфигурационный файл, поэтому проверьте, подходит ли вам изменённая конфигурация. - Исправлен сбой при выходе в сборках с включенной проверкой assert.
- Улучшены документация и поведение
tcp_defer_accept. Документация неверно описывала значение по умолчанию, а “show config” иногда показывал неправильное значение. Если параметр задан, но не поддерживается, теперь выдаётся ошибка вместо молчаливого игнорирования, как и для других платформенных параметров сокета. - Исправлена сборка с c-ares в Windows. Теперь в Windows требуется c-ares версии >=1.18.0.
- Внутренняя переработка
- Большинство предупреждений о deprecation от Autoconf >=2.70 были устранены. Поддержка более старых версий Autoconf по-прежнему сохраняется.
- Использование Cirrus CI расширено на дополнительные платформы.
- Поддержка Travis CI была удалена.
- Обновлены локации поиска по умолчанию файла корневого CA, чтобы поддерживать больше платформ, таких как Fedora, RHEL и CentOS.
- Все сценарии Python теперь по умолчанию используют
python3; совместимость с Python 2 больше не поддерживается. - Скрипты тестового набора используют
command -vвместоwhich, который устарел. - Несколько сообщений об ошибках переформулированы, чтобы яснее указывать соответствующую команду или параметр.
- Скрипты тестового набора больше не требуют GNU sed.
make checkтеперь поддерживается на Windows (хотя тестовый набор SSL пока не работает).- Документировано, что административная консоль поддерживает только простой протокол запросов; соответствующие сообщения об ошибках улучшены.
PgBouncer 1.16.x
2021-11-11 - PgBouncer 1.16.1 - «Тест глубины против тихой эффективности» Это небольшой выпуск с исправлением безопасности.
PgBouncer, действующий как сервер, отклоняет лишние данные после рукопожатия шифрования SSL или GSS.
Злоумышленник, способный внедрять данные в TCP-соединение, может поместить открытые данные в начало предположительно защищённого шифрованием сеанса базы данных. Это можно использовать для отправки серверу поддельных команд SQL, хотя атака сработает только в том случае, если PgBouncer не запрашивает никаких данных аутентификации. (Однако конфигурация PgBouncer, использующая аутентификацию по сертификатам SSL, вполне может их не запрашивать.) (CVE-2021-3935) 2021-08-09 - PgBouncer 1.16.0 - «Отбились от ягуара»
- Возможности
- Поддерживается горячая перезагрузка параметров TLS: после перезагрузки файла конфигурации изменения автоматически вступают в силу.
- Добавлены Unix-сокеты в абстрактном пространстве имён. Для их использования путь начинается с
@. Это соответствует аналогичной возможности PostgreSQL 14. - Длина паролей и имен пользователей была увеличена до 996 символов и 128 символов соответственно. Различные облаковые сервисы требуют этого.
- Минимальный размер пула теперь можно настроить для каждой базы данных, как основной и резервный размеры.
- Число ожидающих отмен запросов отображается в
SHOW POOLS.
- Исправления
- Разбор конфигурации теперь строже обрабатывает ошибки. Раньше ошибка могла лишь записываться в журнал, после чего выполнение продолжалось; теперь такие ошибки препятствуют запуску. Это всегда было предполагаемым поведением, поэтому некоторые пользователи могут обнаружить давно существовавшие ошибки в своих конфигурациях.
- Обработка запросов отмены была исправлена. В некоторых случаях запросы отмены могли казаться заблокированными на длительное время. Теперь это больше не должно происходить. В действительности, запросы отмены могут превышать размер пула в два раза, поэтому они действительно не должны застревать. (#542 , #543 )
- Исправлено совместное использование md5 и scram через hba.conf.
- Исправлена сборка с c-ares в Windows.
- Ожидаемые сообщения “FIXME: query end, but query_start == 0” были исправлены. Теперь мы знаем, почему они возникают, и вы их больше не увидите. (#565 )
- Исправлена перезагрузка параметров
default_pool_size,min_pool_sizeиres_pool_size.
- Внутренняя переработка
- Cirrus CI теперь используется вместо Travis CI.
- Как обычно, было добавлено множество тестов.
- Уточнено сообщение журнала “unclean server”. Теперь выводится “client disconnect while server was not ready” или “client disconnect before everything was sent to the server”. Первое возникает, если клиентское соединение закрывается при открытом блоке транзакции на сервере.
- Имя базы данных “pgbouncer” теперь явно запрещено: оно зарезервировано для административной консоли и никогда корректно не работало как обычная база.
- Ошибки, отправляемые клиентам перед закрытием соединения, теперь имеют уровень FATAL, а не ERROR. (#564 )
- Исправлены предупреждения компилятора GCC 11. (#623 )
PgBouncer 1.15.x
2020-11-19 - PgBouncer 1.15.0 - «У меня ещё остался чемодан в Берлине»
- Возможности
- Улучшена отчетность об ошибках аутентификации. Сообщения об ошибке аутентификации, отправляемые клиенту, теперь содержат только информацию о том, что аутентификация не прошла, и не предоставляют дополнительных деталей. Полные детали доступны в логах PgBouncer. Кроме того, даже если запрашиваемого пользователя не существует, аутентификация все равно обрабатывается до конца и приводит к тому же общему сообщению об ошибке. Это предотвращает попытки клиентов выявить пользователей и другие аутентификационные детали в PgBouncer. Это поведение аналогично тому, как это работает в PostgreSQL.
- Немедленное отключение клиента больше не записывается в журнал. Это устраняет лишние сообщения от систем мониторинга, которые открывают TCP/IP-соединение и закрывают его, не отправив данных.
- Если stderr направлен в журнал systemd, для ведения журнала используются собственные функции systemd. Это устраняет повторные отметку времени и PID и добавляет метаданные, например уровень важности, полезные при пересылке в syslog.
- Часть тестового набора теперь может выполняться под Windows.
SHOW CONFIGтеперь также показывает значения по умолчанию для параметров.
- Исправления
- Исправлен параметр
so_reuseportво FreeBSD. Исходный код PgBouncer 1.12.0 там не работал. (#504 ) - Исправлена компиляция со старыми версиями systemd, нарушенная в 1.14.0. (#505 )
- Исправлена цель makefile для сборки двоичных ZIP-архивов Windows.
- Длинные командные строки теперь также работают на Windows.
- Исправлено поведение глобального
auth_user. Раньше оно было неясным и ненадёжным из-за зависимости от порядка в файле конфигурации; теперь порядок не влияет. (#391 , #393 )
- Исправлен параметр
- Внутренняя переработка
- Улучшена стабильность и портативность тестов.
- Обновлён код, связанный с Autoconf.
- Отключены предупреждения компилятора об устаревших возможностях OpenSSL 3.0.0.
PgBouncer 1.14.x
2020-06-11 - PgBouncer 1.14.0 - «Вновь обретённая магия»
- Возможности
- Добавлена сквозная аутентификация SCRAM. Зашифрованные секреты SCRAM из
userlist.txtилиauth_queryможно использовать для входа на серверы. - Добавлена активация сокетов systemd. Она особенно полезна, когда systemd должна создавать Unix-сокеты в системах с ограниченным доступом к
/var/run/postgresql. - Добавлена поддержка Unix-сокетов в Windows.
- Добавлена сквозная аутентификация SCRAM. Зашифрованные секреты SCRAM из
- Внутренняя переработка
- Добавлен альтернативный более компактный образец конфигурационного файла
pgbouncer-minimal.iniдля тестирования или развертывания.
- Добавлен альтернативный более компактный образец конфигурационного файла
PgBouncer 1.13.x
2020-04-27 - PgBouncer 1.13.0 - «Моя любимая игра»
Возможности
- Добавлен параметр конфигурации
tcp_user_timeout, задающий соответствующий параметр сокета. - Значением
client_tls_protocolsиserver_tls_protocolsпо умолчанию сталоsecure, то есть включены только TLS 1.2 и TLS 1.3. Старые версии по-прежнему поддерживаются, но не включены по умолчанию. - Добавлена поддержка уведомлений службы systemd. Сейчас она позволяет
использовать службы с
Type=notify. В будущих версиях планируется более тесная интеграция.
- Добавлен параметр конфигурации
Исправления
- Исправлены многострочные сообщения журнала. (libusual #24 )
- Правильно обрабатываются пустые имена пользователей, возвращённые
auth_query. (#340 )
Очистка
- Файлы пакета Debian в каталоге
debianудалены. Рекомендуется использовать пакеты из https://apt.postgresql.org/ . - В набор тестов внесены многочисленные исправления и улучшения.
- По умолчанию тесты больше не пытаются использовать sudo. Теперь это можно
явно включить переменной окружения
USE_SUDO. - Использование API libevent обновлено до интерфейсов в стиле версии 2; устаревшие интерфейсы версии 1 больше не применяются.
- Файлы пакета Debian в каталоге
PgBouncer 1.12.x
2019-10-17 - PgBouncer 1.12.0 - «Учимся и становимся лучше»
Этот выпуск содержит различные небольшие улучшения и исправления.
Возможности
- Добавлен параметр для включения параметра сокета
SO_REUSEPORT. В некоторых операционных системах это позволяет запускать на одном узле несколько экземпляров PgBouncer, прослушивающих один порт, а ядро автоматически распределяет соединения. - Добавлен параметр для использования файла
resolv.conf, отдельного от системного. Он позволяет задавать пользовательские серверы DNS и, возможно, другие параметры DNS. - Вывод
SHOW VERSIONотправляется как обычная строка результата, а не сообщение NOTICE. Так его проще обрабатывать, и поведение соответствует другим командамSHOW.
- Добавлен параметр для включения параметра сокета
Исправления
- Столбцы статистики отправляются как
numeric, а неbigint. Это устраняет сбои некоторых клиентских библиотек при значениях, выходящих за диапазонbigint. (#360 , #401 ) - Исправлена потеря пароля пользователями PAM. (#285 )
- Принимаются клиенты SCRAM с включённой привязкой канала. Ранее клиент с поддержкой привязки канала, то есть PostgreSQL 11+, в некоторых ситуациях получал ошибку соединения с PgBouncer. Сам PgBouncer не поддерживает привязку канала; изменение лишь исправляет поддержку предлагающих её клиентов.
- Исправлена компиляция с новыми версиями musl-libc, используемой Alpine Linux.
- Столбцы статистики отправляются как
Очистка
- Добавлена цель
make check, запускающая все тесты одной командой. - Удалены ссылки на вики PostgreSQL. Теперь вся информация находится в документации PgBouncer или на сайте.
- Удалена поддержка Libevent версии 1.x. Теперь требуется Libevent 2.x, обнаруживаемый с помощью pkg-config.
- Исправлены предупреждения компилятора в macOS и Windows. Теперь сборка на этих платформах не должна выдавать предупреждений.
- Исправлены некоторые предупреждения LLVM scan-build.
- Добавлена цель
PgBouncer 1.11.x
2019-08-27 - PgBouncer 1.11.0 - «Инстинкт величия»
- Возможности
- Добавлена поддержка аутентификации SCRAM для клиентов и серверов. Добавлен
тип аутентификации
scram-sha-256. auth_type=passwordпри хранимом пароле md5 обрабатывается так же, как сервером PostgreSQL. (#129 )- Добавлен параметр
log_stats, отключающий вывод статистики в журнал. (#287 ) - В отметки времени журнала добавлен часовой пояс.
- PID в префиксе журнала заключён в квадратные скобки.
- Добавлена поддержка аутентификации SCRAM для клиентов и серверов. Добавлен
тип аутентификации
- Исправления
- Исправлен тест OpenSSL в configure при работе с новыми версиями OpenSSL и
-Werror. - Исправлен расчёт времени ожидания с
auth_user. Ошибка приводила к аварийному завершению или мусорным значениям времени ожидания. (#393 ) - Обрабатывается пакет GSSENCRequest, добавленный в PostgreSQL 12. Сейчас он ничего не делает, но предотвращает непонятные сообщения об ошибке “bad packet header”.
- Исправлен тест OpenSSL в configure при работе с новыми версиями OpenSSL и
- Очистка
- В набор тестов внесено множество улучшений и добавлено несколько тестов.
- Исправлено несколько предупреждений компилятора в Windows.
- Расширена документация секции
[users], и она добавлена в пример файла конфигурации. (#330 )
PgBouncer 1.10.x
2019-07-01 - PgBouncer 1.10.0 - «Боится мира»
- Возможности
- Добавлено включение и отключение TLS 1.3. Поддержка TLS 1.3 уже зависела от библиотеки OpenSSL, но теперь эта версия поддерживается и параметрами выбора версий протокола TLS.
- Исправления
- Исправлена поддержка TLS 1.3, нарушенная с OpenSSL 1.1.1 и 1.1.1a, но не в более ранних или поздних версиях.
- Исправлено редкое аварийное завершение в
SHOW FDS. (#311 ) - Исправлена проблема, способная приводить к длительному простою при поступлении множества запросов отмены. (#329 )
- После перезагрузки Postgres больше не появляется сообщение “unexpected response from login query”. (#220 )
- Исправлен расчёт
idle_transaction_timeout. (#125 ) Ошибка приводила к преждевременным тайм-аутам в отдельных ситуациях.
- Очистка
- Различные сообщения журнала и ошибки сделаны точнее.
- Исправлены проблемы, найденные Coverity; ни одна не оказывала существенного влияния на практике.
- Все тестовые сценарии улучшены и документированы.
- В документацию добавлены дополнительные команды SHOW.
- Документация преобразована из rst в Markdown.
- Все сценарии Python в дереве исходного кода теперь совместимы с Python 3.
PgBouncer 1.9.x
2018-08-13 - PgBouncer 1.9.0 - «Выживание в хаосе»
- Возможности
- Команда RECONNECT.
- Команда WAIT_CLOSE.
- Быстрое закрытие: немедленно отключать сервер в сеансовом режиме пула, если он находится в состоянии “close_needed” (reconnect).
- В SHOW SERVERS добавлен столбец close_needed.
- Исправления
- Устранено двойное освобождение памяти в parse_filename.
- Устранено разыменование указателя NULL в parse_line.
- Очистка
- mkauth.py перенесён на Python 3.
- Улучшена документация сигналов.
- Улучшена документация быстрого запуска.
- Документирована команда SET.
- Исправлен список необходимого ПО.
- Исправлены предупреждения -Wimplicit-fallthrough.
- Добавлена отсутствовавшая документация различных полей SHOW.
- Документировано поведение переподключения при перезагрузке и изменении DNS.
- Документировано, что после KILL требуется RESUME.
- Уточнена документация server_lifetime.
- Исправлены опечатки и регистр букв в сообщениях и документации.
- Исправлен вызов psql в тестах.
- Внесены прочие улучшения настройки тестов.
PgBouncer 1.8.x
2017-12-20 - PgBouncer 1.8.1 - «Тактика добивания в партере»
- Исправления
- Файл
include/pam.hвключён в архив дистрибутива. Из-за его отсутствия архив 1.8 вообще не собирался.
- Файл
2017-12-19 - PgBouncer 1.8 - «Уверенно у штурвала»
- Возможности
- Поддерживается аутентификация PAM. (Включается через
--with-pam.) - В вывод
SHOW DATABASESдобавлены поляpausedиdisabled. - В вывод
SHOW POOLSдобавлено полеmaxwait_us. - В вывод команд
SHOWдобавлены поляwaitиwait_us. - Добавлены команды
SHOW STATS_TOTALSиSHOW STATS_AVERAGES. - Запросы и транзакции в
SHOW STATSотслеживаются отдельно. Поляtotal_requests,avg_reqиavg_queryзаменены новыми полями. - В
SHOW STATSдобавленоwait_time.
- Поддерживается аутентификация PAM. (Включается через
- Исправления
- Обновлённая libusual поддерживает OpenSSL 1.1.
- Попытки использовать TLS в Unix-сокетах больше не выполняются.
- При разборе
pg_hba.confошибочные строки больше не приводят к отклонению всего файла; разбор продолжается. (#118 ) - Исправлено несколько других ошибок разбора hba.
- Исправлено состояние гонки при отмене запроса. (#141 )
- Очистка
- Параметр
auth_userтеперь разрешён и глобально, а не только для отдельных баз данных. (#142 ) - Для клиента и сервера консоли задана кодировка
UTF8.
- Параметр
PgBouncer 1.7.x
2016-02-26 - PgBouncer 1.7.2 - «Наконец в воздухе»
- Исправления
- Исправлено аварийное завершение при удалении устаревшего pidfile. Проблема появилась в 1.7.1.
- Очистка отключена: она нарушает перехват и бесполезна для производственной нагрузки. Проблема появилась в 1.7.1.
- После перехвата запуск ожидает исчезновения pidfile. Медленное завершение из-за очистки памяти выявило существующее состояние гонки. (#113 )
- Очистка
2016-02-18 - PgBouncer 1.7.1 - «Перешли пяти друзьям, иначе…»
ПРЕДУПРЕЖДЕНИЕ: начиная с версии 1.7, server_reset_query не выполняется,
когда база данных работает в транзакционном режиме пула. По-видимому, в
объявлении 1.7 это было подчёркнуто недостаточно. Если приложения зависят от
такого поведения, восстановите его через server_reset_query_always.
Основной работой этого выпуска был поиск утечки памяти, связанной с TLS, которой, как выяснилось, не существует. Вместо неё обнаружена сборка libssl в Debian/wheezy с накладными расходами 600k на соединение без утечки вместо ожидаемых 20-30k. При использовании TLS за этим следует следить.
- Исправления
- TLS: sslmode “disabled” переименован в “disable”, как в PostgreSQL.
- TLS:
client_tls_sslmode=verify-ca/-fullтеперь отклоняет соединения без клиентского сертификата. (#104 ) - TLS:
client_tls_sslmode=allow/requireпроверяет клиентский сертификат, если он отправлен. Ранее проверка сертификата оставалась ненастроенной, поэтому соединения с клиентским сертификатом завершались ошибкой. (#105 ) - Исправлена утечка памяти при освобождении базы данных.
- Исправлена потенциальная утечка памяти в tls_handshake().
- Исправлена обработка EOF в tls_handshake().
- Исправлен слишком маленький memset в совместимой реализации asn1_time_parse.
- Исправлена сборка без TLS (
--without-openssl). (#101 ) - Исправлены различные проблемы сборки в Windows. (#100 )
- Очистка
- TLS: для снижения потребления памяти неактивными соединениями используется SSL_MODE_RELEASE_BUFFERS.
- Выделенная память очищается при завершении. Это помогает запускать средства поиска утечек памяти.
- Улучшена документация
server_reset_query. (#110 ) - Параметры TLS добавлены в пример конфигурации.
2015-12-18 - PgBouncer 1.7 - «Цвета меняются после воскрешения»
- Возможности
- Поддерживаются соединения TLS. В качестве реализации бэкенда используется OpenSSL/LibreSSL.
- Поддерживается аутентификация с помощью клиентского сертификата TLS.
- Поддерживается аутентификация “peer” в Unix-сокетах.
- Поддерживается файл управления доступом по узлам, подобный pg_hba.conf в Postgres. Он позволяет настроить TLS для сетевых соединений и аутентификацию “peer” для локальных.
- Очистка
- Значение
query_wait_timeoutпо умолчанию установлено в 120s. Текущее значение по умолчанию (0) приводит к бесконечному ожиданию в очереди, что бесполезно. Теперь, если у клиента есть ожидающий запрос, но ему не назначено серверное соединение, клиентское соединение будет закрыто. server_reset_query_alwaysпо умолчанию отключён. Теперь запрос сброса используется только в пулах сеансового режима.- pkt_buf увеличен до 4096 bytes. Это повышает производительность с TLS. Поведение, вероятно, зависит от нагрузки, но изменение должно быть безопасным: начиная с v1.2, буферы пакетов отделены от соединений и лениво берутся из пула.
- Поддерживается конвейерная обработка с подсчётом ожидаемых пакетов ReadyForQuery. Это предотвращает слишком раннее освобождение сервера и исправляет #52 .
- Улучшена логика sbuf_loopcnt: сокет гарантированно обрабатывается повторно, даже если от него нет событий. Это необходимо для TLS с собственной буферизацией.
- Системные тесты адаптированы к современным BSD и MacOS. (Eric Radman)
- Удалена аутентификация crypt. Она устарела и не поддерживается PostgreSQL начиная с 8.4.
- Исправлен обычный параметр configure “–with-cares”: без аргумента он не работал.
- Значение
PgBouncer 1.6.x
2015-09-03 - PgBouncer 1.6.1 - «Студийная аудитория одобряет»
Возможности
Добавлен параметр
server_reset_query_always. При его включенииserver_reset_queryне используется в пулах, отличных от сеансового режима. PgBouncer вводит отдельный pool_mode для каждого пула, но сеансовый и транзакционный режимы не должны использовать одинаковый запрос сброса. Более того, транзакционный режим вообще не должен использовать запрос сброса.Параметр включён в 1.6.x, но будет отключён в 1.7.
Исправления
[SECURITY] Удалено недопустимое назначение
auth_user. (#69) Когда заданauth_user, а клиент запрашивает несуществующее имя пользователя, клиент входил какauth_user. Это небезопасно.NoticeResponse пропускается в handle_auth_response. Иначе подробные уровни журнала сервера приводили к ошибкам входа.
Консоль: при auth_type=any заполняется
auth_user, иначе ведение журнала могло завершиться аварийно (#67).Исправлены различные проблемы переносимости (OpenBSD, Solaris, OSX).
2015-08-01 - PgBouncer 1.6 - «Зомби будущего»
Возможности
Хеш пароля пользователя загружается из базы данных Postgres. Новые параметры:
auth_user пользователь для подключения к той же базе и получения сведений о пользователе. Также можно задать для отдельной базы данных.
auth_query Запрос SQL, выполняемый от auth_user. По умолчанию: “SELECT usename, passwd FROM pg_shadow WHERE usename=$1”
(Cody Cutrer)
Режим пула можно настраивать и для отдельной базы данных, и для пользователя. (Cody Cutrer)
Добавлены ограничения соединений по базе данных и пользователю: max_db_connections и max_user_connections. (Cody Cutrer / Pavel Stehule)
Добавлены команды DISABLE/ENABLE для запрета новых соединений. (William Grant)
Добавлен новый бэкенд DNS: c-ares. Это единственный бэкенд DNS, поддерживающий все важные возможности: /etc/hosts с обновлением, поиск SOA, большие ответы через TCP/EDNS+UDP и IPv6. Теперь это предпочтительный бэкенд, и, вероятно, в будущем он станет единственным, поскольку поддерживать множество неполноценных библиотек бессмысленно.
SNAFU: версии c-ares <= 1.10 содержат ошибку, нарушающую поддержку CNAME при включённом IPv6. Ошибка исправлена в исходном проекте. В качестве обхода c-ares <= 1.10 используется только с IPv4. Поэтому PgBouncer откажется от других бэкендов лишь после того, как c-ares >1.10, ещё не выпущенный на тот момент, будет доступен некоторое время…
remote_pid отображается в SHOW CLIENTS/SERVERS. Он доступен для клиентов, подключённых через Unix-сокеты, а также для серверов с TCP- и Unix-сокетами. Для TCP-сервера PID берётся из ключа отмены.
Добавлен отдельный параметр конфигурации dns_nxdomain_ttl для управления отрицательным кэшированием DNS. (Cody Cutrer)
IP-адрес и порт клиентского узла добавляются к application_name. Это включается параметром application_name_add_host со значением по умолчанию ‘off’. (Andrew Dunstan)
Файлы конфигурации поддерживают директиву ‘%include FILENAME’, позволяющую разделить конфигурацию на несколько файлов. (Andrew Dunstan)
Очистка
- Журнал: адрес IPv6 заключён в [].
- Журнал: при соединении с сервером показываются локальные IP и порт.
- win32: для длинных аргументов используется стиль GNU: –foo.
- В имени узла разрешены цифры; всегда выполняется попытка разбора через inet_pton.
- Исправлен deallocate_all() в FAQ.
- Исправлено неверное ключевое слово в примере файла конфигурации. (Magnus Hagander)
- В файлах аутентификации разрешены комментарии с ‘;’. (Guillaume Aubert)
- Исправлены орфографические ошибки в сообщениях журнала и комментариях. (Dmitriy Olshevskiy)
Исправления
- Исправлен запуск новых соединений во время обслуживания. (Cody Cutrer)
- Файл аутентификации больше не загружается дважды при запуске. (Cody Cutrer)
- Реализована правильная инвалидация автоматически созданных баз данных.
- IPv6: для прослушивающего сокета задан IPV6_V6ONLY.
- win32: для прослушивающего сокета не задаётся SO_REUSEADDR.
- Исправлен memcpy адреса IPv6.
- Исправлена отмена ожидающих клиентов. (Mathieu Fenniak)
- Небольшое исправление: результат calloc обязательно проверяется. (Heikki Linnakangas)
- В конец файла PID добавлен перевод строки. (Peter Eisentraut)
- Новые серверные соединения запрещены после команды PAUSE
. (Petr Jelinek) - Исправлено сообщение “bad packet” при входе, когда заголовок задерживается. (Michal Trojnara, Marko Kreen)
- Исправлены ошибки, обнаруженные Coverty. (Euler Taveira)
- server_idle_timeout отключается, когда число серверов становится меньше min_pool (#60). (Marko Kreen)
PgBouncer 1.5.x
2015-04-09 - PgBouncer 1.5.5 - «Прикинься мёртвым, чтобы победить»
- Исправления
- Исправлено удалённое аварийное завершение: неверный порядок пакетов приводил к обращению по указателю NULL. Ошибка не эксплуатируется, это лишь DoS.
2012-11-28 - PgBouncer 1.5.4 - «Утечек нет, приучение к горшку прошло успешно»
- Исправления
- DNS: исправлена утечка памяти в бэкенде getaddrinfo_a().
- DNS: исправлена утечка памяти в бэкенде udns.
- DNS: исправлен расчёт статистики.
- DNS: улучшена обработка сообщений об ошибках getaddrinfo_a().
- Исправлена компиляция win32.
- Исправлена проверка поддержки зависимостей компилятора в configure.
- Исправлена документация.
2012-09-12 - PgBouncer 1.5.3 - «Квантовый тостер»
Критическое исправление
Слишком длинные имена баз данных могли приводить к удалённо вызываемому аварийному завершению при включённых автоматически создаваемых базах данных.
Исходные проверки предполагали, что все имена поступают из файлов конфигурации, поэтому использование fatal() было допустимо, но при включении автоматически создаваемых баз
- через ‘*’ в секции [databases] - имя базы может прийти из сети, что делает возможным удалённое завершение работы.
Небольшие возможности
- max_packet_size — параметр конфигурации максимального разрешённого размера пакета. Значение по умолчанию осталось прежним: (2G-1), но теперь его можно уменьшить.
- Если заголовок пакета невозможно разобрать, он выводится в журнал и сообщение об ошибке в шестнадцатеричном виде.
Исправления
- AntiMake использовал $(relpath) и $(abspath) для работы с путями, но при символических ссылках в пути дерева исходного кода сборка завершалась ошибкой. Теперь код работает только с обычными строками.
- Консоль: SET теперь может задавать значения пустых строк.
- config.txt: указано, что все тайм-ауты можно задавать дробными числами. Эта малозаметная возможность появилась в 1.4.
2012-05-29 - PgBouncer 1.5.2 - «Не жуй, просто глотай»
- Исправления
- Из-за ошибки reserve_pool_timeout воспринимался в микросекундах, а не в секундах, фактически немедленно активируя резервный пул при заполнении основного. Теперь, как и предполагалось, значение используется в секундах. (Обнаружил Keyur Govande)
2012-04-17 - PgBouncer 1.5.1 - «Прервать, повторить, игнорировать?»
- Возможности
- Добавлены параметры прав доступа к Unix-сокету: unix_socket_mode=0777, unix_socket_group=’’.
- Исправления
- Для серверной переменной разрешена пустая строка. Это необходимо для правильной работы “application_name”, поскольку только у этого параметра нет серверного значения по умолчанию.
- При изменении строки соединения требуется обновить параметры сервера. Ранее PgBouncer продолжал использовать старые параметры, что нарушало работу при обновлении Postgres.
- При изменении строки соединения автоматически созданной базы старые соединения удаляются.
- cf_setint: для разбора целочисленных параметров конфигурации используется strtol() вместо atoi(). Это поддерживает шестнадцатеричную и восьмеричную запись и лучше обнаруживает ошибки.
- Для обнаружения union sigval используется sigqueue(), что исправляет компиляцию в HPUX.
- Команда ‘git’ удалена из Makefile: при сборке из обычного архива она выдавала случайные ошибки.
- Документирован параметр stats_period, задающий период вывода статистики.
- Требуется Asciidoc >= 8.4: документация, по-видимому, больше не совместима с более ранними версиями.
- Прекращены повторные попытки при EINTR от close().
2012-01-05 - PgBouncer 1.5 - «Довольные клиенты с 2007 года»
Если за одним именем DNS находится более 8 IP-адресов, теперь для запросов необходимо использовать протокол EDNS0. Его поддерживают только бэкенды getaddrinfo_a()/getaddrinfo() и UDNS; libevent 1.x/2.x не поддерживает. Чтобы включить его для libc, добавьте ‘options edns0’ в /etc/resolv.conf.
Для сборки требуется GNU Make 3.81+.
- Возможности
- Изменения ответов DNS распознаются, а соединения с IP-адресами, отсутствующими в последнем ответе, признаются недействительными. (Petr Jelinek)
- Инвалидация имён узлов по серийному номеру зоны DNS. Когда задан dns_zone_check_period, у всех зон DNS запрашивается SOA; после изменения серийного номера повторно запрашиваются все имена узлов. Это обеспечивает детерминированную инвалидацию соединений, поскольку инвалидация при поиске бесполезна, если поиск не выполняется. Работает только с новым бэкендом UDNS.
- Добавлены команды SHOW DNS_HOSTS и SHOW DNS_ZONES для просмотра кэша DNS.
- Добавлен параметр min_pool_size, предотвращающий закрытие всех соединений при отсутствии нагрузки. (Filip Rembialkowski)
- idle_in_transaction_timeout закрывает слишком долго неактивную транзакцию. По умолчанию не задан.
- Добавлен бэкенд libudns для поиска DNS. Он функциональнее evdns. Включается через –with-udns. IPv6 пока не поддерживается.
- Команда KILL немедленно закрывает все соединения одной базы данных. (Michael Tharp)
- Выполнен переход на систему сборки Antimake для более удобных Makefile. Теперь для сборки требуется GNU Make 3.81+.
- Исправления
- DNS теперь работает с именами узлов IPv6.
- Состояние соединения не меняется при поступлении NOTIFY от сервера.
- Внесены различные исправления документации. (Dan McGee)
- Консоль: поддерживаются кавычки идентификаторов с “”. Изначально команд, принимающих имена баз данных, не было, поэтому кавычки не требовались.
- Консоль: цифры разрешены в начале регулярного выражения слова. Строгий анализатор здесь чрезмерно усложняет работу.
- Приостановленные автоматически созданные базы данных не удаляются по сроку. (Michael Tharp)
- Автоматические базы создаются при необходимости во время PAUSE. (Michael Tharp)
- Исправлено неверное сообщение журнала команды RESUME. (Peter Eisentraut)
- Если строка соединения базы содержит user= без password=, пароль берётся из userlist.
- ‘*’ правильно разбирается в коде перехвата.
- autogen.sh работает со старыми autoconf/automake.
- Исправлено аварийное завершение службы win32 из-за неверного basename() из среды выполнения mingw/msvc. Теперь всегда используется совместимая реализация basename().
PgBouncer 1.4.x
2011-06-16 - PgBouncer 1.4.2 - «Алгоритм первого удара»
Затронутые операционные системы: *BSD, Solaris, Win32.
- Исправления переносимости
- CFLAGS передаётся компоновщику. Это необходимо при использовании резервной реализации getaddrinfo_a() на основе pthread.
- lib/find_modules.sh: split() заменён на index()+substr(). Это должно обеспечить работу со старыми версиями AWK.
- <usual/endian.h>: системные определения htoX/Xtoh игнорируются, поскольку может быть определено лишь подмножество макросов.
- <usual/signal.h>: совместимый sigval отделён от совместимого sigevent.
- <usual/socket.h>: для получения iovec включён <sys/uio.h>.
- <usual/time.h>: улучшено автоматическое обнаружение функций в win32.
- <usual/base_win32.h>: удалено повторное объявление sigval/sigevent.
2011-04-01 - PgBouncer 1.4.1 - «Всё это было представлением»
Возможности
- Поддерживается прослушивание и подключение по адресам IPv6. (Hannu Krosing)
- В ’listen_addr’ поддерживается несколько адресов прослушивания. Для каждого вызывается getaddrinfo(), поэтому можно использовать и имена.
- Консоль: версия PgBouncer отправляется клиенту как ‘server_version’.
Важные исправления
getaddrinfo_a() отключён в glibc < 2.9, поскольку в старых версиях он вызывает аварийное завершение.
Среди затронутых систем: RHEL/CentOS 5.x (glibc 2.5), Ubuntu 8.04 (glibc 2.7), а также Debian/lenny (glibc 2.7), где getaddrinfo_a() не завершается аварийно, но надёжно обнаружить это невозможно.
В таких системах используйте libevent 2.x: резервный getaddrinfo_a() не предназначен для производственной эксплуатации. Изучите новый раздел «Поддержка поиска DNS» в README, где описан выбор бэкенда DNS.
(Hubert Depesz Lubaczewski, Dominique Hermsdorff, David Sommerseth)
При использовании libevent 2.x по умолчанию включается –enable-evdns.
tcp_keepalive включён по умолчанию, как и в Postgres. (Hubert Depesz Lubaczewski)
Значением server_reset_query по умолчанию стало DISCARD ALL для стандартной совместимости с Postgres.
win32: исправлены аварийные завершения при адресе Unix-сокета NULL. (Hiroshi Saito)
Исправлена очистка автоматически созданных баз данных: старый код путал базы и пулы. При обнаружении одного пустого пула база помечалась как ‘idle’, что позднее могло удалить базу с активными пользователями.
Сообщил: Hubert Depesz Lubaczewski
Исправления
- Совместимый getaddrinfo_a() сделан неблокирующим: для поиска используется один параллельный поток.
- Компиляция с pthread включается при использовании совместимого getaddrinfo_a.
- release_server не задавал ->last_lifetime_disconnect при отключении по сроку существования. (Emmanuel Courreges)
- win32: исправлен файл аутентификации с окончаниями строк DOS — load_file() не учитывал уменьшение файла при загрузке. (Rich Schaaf)
- <usual/endian.h>: добавлено обнаружение функций enc/dec через autoconf, чтобы избежать конфликтов в BSD. (James Pye)
- Устранено аварийное завершение при отсутствии файла конфигурации. (Lou Picciano)
- Устранено аварийное завершение при ошибке поиска DNS и ведении журнала на уровне noise (-v -v). (Hubert Depesz Lubaczewski, Dominique Hermsdorff)
- В find_modules.sh используются обратные кавычки вместо $(cmd) для лучшей переносимости. (Lou Picciano)
- В find_modules.sh используется ‘awk’ вместо ‘sed’ для лучшей переносимости. (Giorgio Valoti)
- При запуске в журнал выводятся сведения об активном асинхронном бэкенде DNS.
- Исправлен –disable-evdns: теперь он означает ’no’, а не ‘yes’.
- В документации указано, что -R требует unix_socket_dir.
- server_reset_query рассмотрен в faq.txt.
- В slab-аллокатор восстановлен утраченный memset.
- В libusual внесены различные небольшие исправления переносимости.
2011-01-11 - PgBouncer 1.4 - «Кровавый код»
Возможности
Асинхронный поиск DNS: имена разрешаются не при перезагрузке, а при установлении соединения, с настраиваемым кэшированием. (См. параметр dns_max_ttl.)
По умолчанию в качестве бэкенда используется getaddrinfo_a() из glibc. При его отсутствии getaddrinfo_a() эмулируется через блокирующий(!) getaddrinfo().
Если configure передан аргумент –enable-evdns, используется evdns из libevent. По умолчанию он не применяется, поскольку libevent 1.3/1.4 содержит ошибочную реализацию. Приемлемым выглядит только evdns из libevent 2.0.
Добавлена переменная конфигурации syslog_ident для настройки имени syslog.
Реализована полноценная поддержка параметра запуска
application_name.Добавлены длинные параметры командной строки (Guillaume Lelarge).
Исправлена переносимость в Solaris (Hubert Depesz Lubaczewski).
Добавлена переменная конфигурации disable_pqexec. В средах с повышенными требованиями можно отключить Simple Query Protocol. Тогда приложения должны использовать только Extended Query Protocol.
Совместимость с Postgres: если имя базы данных в пакете запуска пусто, используется имя пользователя.
Исправления
- Параметры сервера DateStyle и TimeZone должны иметь точный регистр.
- Консоль: клиенту отправляются параметры сервера datetime, timezone и stdstr.
Внутренняя очистка
- Для низкоуровневых вспомогательных функций используется библиотека libusual.
- Из параметров сервера удалено ограничение фиксированной длины.
PgBouncer 1.3.x
2010-09-09 - PgBouncer 1.3.4 - «Баунсер всегда прав»
- Исправления
- Логика быстрого отказа применяется при установлении соединения. Если сервер не работает, клиенты получают ошибку при подключении.
- Автоматически созданные базы данных больше не помечаются для проверки при перезагрузке, иначе они удалялись, поскольку отсутствуют в конфигурации.
- Параметр application_name по умолчанию игнорируется. Поэтому пользователям Postgres 9.0 не требуется самостоятельно добавлять его в ignore_startup_parameters=.
- Исправлено заключение pg_auth в кавычки. Символ ‘' там не используется.
- Улучшены сообщения об ошибках в консоли: пользователю показывается входящий запрос.
- Поддерживаются операционные системы (OpenBSD), где tv_sec не имеет тип time_t.
- Устранены излишне шумные предупреждения gcc 4.5.
2010-05-10 - PgBouncer 1.3.3 - «NSFW»
- Улучшения
- Аргумент listen(2) теперь настраивается через listen_backlog. Это полезно в операционных системах, где можно менять максимально допустимое системное значение.
- Сообщения об отключении теперь показывают имя пользователя или базы данных, из-за которых вход завершился неудачно.
- Исправления
- Переработана логика повторного запуска после быстрого отказа. Прежняя логика мешала при постоянно неисправных базах данных или пользователях, выполняя повторные попытки даже без клиентов, желающих войти.
- Функции ведения журнала сохраняют прежнее значение errno, иначе при высоких уровнях журналирования и проблемах записи PgBouncer мог вести себя непредсказуемо.
- Увеличены различные буферы, относящиеся к запуску, для обработки более многословного запуска EDB.
- Запрос запуска протокола V2 распознаётся и сопровождается понятной причиной отключения.
2010-03-15 - PgBouncer 1.3.2 - «Пуля-бумеранг»
Исправления
Добавлена переменная конфигурации ‘query_wait_timeout’. Если клиент не получает серверное соединение за указанное число секунд, он будет отключён.
Если в пуле нет серверного соединения, а последняя попытка подключения завершилась неудачно, клиентские соединения не переводятся в ожидание — ошибка отправляется сразу.
Вместе с предыдущим исправлением это устраняет ненужные задержки при недоступности базы данных.
Состояние libevent отслеживается в sbuf.c, чтобы избежать двойного вызова event_del(). Хотя обычно это безопасно, такой вызов работает не в 100% случаев. Теперь всегда должно быть известно, был ли он уже выполнен.
Во время SUSPEND обслуживание отключается. Иначе при коротких тайм-аутах старый процесс PgBouncer мог закрыть несколько соединений после их передачи.
client_login_timeout применяется к клиентам, ожидающим приветственного пакета — первого серверного соединения. Иначе они могли ждать бесконечно, если не задан query_timeout.
win32: к -regservice добавлены ключи -U/-P, позволяющие выбрать учётную запись для запуска службы. Прежний автоматический выбор между Local Service и Local System был недостаточно надёжен.
Консоль: из конца текстовых столбцов удалён \0. Проблему было трудно заметить, поскольку клиенты C корректно его обрабатывали.
Улучшена документация. (Greg Sabino Mullane)
Уточнено несколько сообщений журнала, связанных со входом.
Уровень журналирования ошибок, отправляемых пулом обычно при отключении, изменён с INFO на WARNING, поскольку они указывают на проблемы.
Сообщение журнала для query_timeout изменено на “query timeout”.
2009-07-06 - PgBouncer 1.3.1 - «Теперь полностью соответствует требованиям мониторинга NSA»
- Исправления
- Исправлена проблема sbuf_loopcnt, из-за которой соединения могли зависать. Если длина запроса или результата близка к кратному (pktlen*sbuf_loopcnt) [10k по умолчанию], соединение могло продолжать ждать данные, которые уже не появятся.
- Изменение конфигурации базы данных применяется немедленно. Ранее старые соединения могли повторно использоваться после SIGHUP.
- Исправлена команда SHOW DATABASES, нарушенная добавлением столбца.
- При “auth_type=any” доступ к консоли был отключён, поскольку PgBouncer отбрасывал имя пользователя. Исправление: при “auth_type=any” любой пользователь допускается в консоль как администратор.
- Исправлен неверный макрос CUSTOM_ALIGN. К счастью, он не используется, если операционная система уже определяет ALIGN, поэтому ошибка, по-видимому, не проявлялась на практике.
- win32: WSAStartup() всегда вызывается, а не только в режиме демона, поскольку при разборе конфигурации необходимо разрешать имена узлов.
- win32: имя файла конфигурации в командной строке службы заключено в кавычки, чтобы пути могли содержать пробелы. Путь исполняемого файла, судя по всему, в этом не нуждается благодаря особенностям win32.
- STATS добавлено в текст SHOW HELP.
- doc/usage.txt: единицы времени в результатах консоли — микросекунды, а не миллисекунды.
2009-02-18 - PgBouncer 1.3 - «Новый завершающий приём Ki-Smash»
Возможности
IANA назначила порт 6432 официальным портом PgBouncer. Поэтому номер порта по умолчанию изменён на 6432. Отдельным существующим пользователям ничего менять не требуется, но распространителям пакетов PgBouncer следует изменить значение пакета по умолчанию на официальный порт.
Динамическое создание баз данных (David Galoyan)
Теперь можно определить базу данных с именем “*”. Если она определена, её строка соединения используется для всех неопределённых баз. Это особенно полезно в тестовых средах и средах разработки.
Поддержка Windows (Hiroshi Saito)
Теперь PgBouncer работает в Windows 2000+. Использование командной строки остаётся прежним, но запуск в режиме демона и перезапуск без остановки обслуживания недоступны. Для запуска как службы задайте в конфигурации параметр service_name. Затем выполните:
> pgbouncer.exe config.ini -regservice > net start SERVICE_NAMEДля остановки и отмены регистрации:
> net stop SERVICE_NAME > pgbouncer.exe config.ini -unregserviceДля использования журнала событий Windows сначала необходимо зарегистрировать DLL событий:
> regsrv32 pgbevent.dllПосле этого в конфигурации можно задать “syslog = 1”.
Небольшие возможности
Имена баз данных в файле конфигурации теперь можно заключать в стандартные кавычки идентификаторов SQL, что позволяет использовать нестандартные символы.
Добавлены параметры ‘reserve_pool_size’ и ‘reserve_pool_timeout’. Если клиенты пула ждут дольше ‘reserve_pool_timeout’ секунд, ‘reserve_pool_size’ задаёт число соединений, которые можно добавить в пул. Значение также можно задать для отдельного пула переменной соединения ‘reserve_pool’.
Добавлен параметр ‘sbuf_loopcnt’, ограничивающий время обработки одного сокета.
В некоторых ситуациях — например на SMP-сервере с локальным Postgres и быстрой сетью — PgBouncer может многократно выполнять цикл recv()->send() без блокировки с обеих сторон. Тогда другие соединения надолго задерживаются. Для более справедливой обработки ограничивается число циклов recv()->send() на одном сокете. После достижения предела обрабатываются другие сокеты, а работа с прежним возобновляется в следующем цикле событий.
Спасибо Alexander Schocke за сообщение и тестирование.
Аутентификация crypt() теперь необязательна, поскольку она удалена из Postgres. Если операционная система её не предоставляет, PgBouncer работает без неё.
В отметки времени журнала добавлены миллисекунды.
Прежняя реализация MD5 заменена более компактной.
Лицензия ISC обновлена разъяснением FSF.
Исправления
Если event_del() сообщает об ошибке, очистка всё равно продолжается. Ранее PgBouncer повторял вызов на случай ошибки из-за ENOMEM. Это приводило к переполнению журнала бесконечными повторами, поэтому, по-видимому, libevent такое поведение не поддерживает.
Причина ошибки первого вызова event_del() по-прежнему неизвестна.
Теперь –enable-debug лишь определяет, удаляются ли отладочные сведения из двоичного файла. Параметр больше не меняет -fomit-frame-pointer, поскольку это опасно.
Исправлен порядок включения: иначе системные включаемые файлы могли предшествовать внутренним. Проблема затрагивала новый включаемый файл md5.h.
Файл COPYRIGHT включён в .tgz…
PgBouncer 1.2.x
2008-08-08 - PgBouncer 1.2.3 - «Тщательно отобранные байты»
- Исправления
- Код SO_ACCEPTFILTER отключён для BSD, где он не работал.
- Пример etc/userlist.txt включён в tgz.
- Для рекурсивного вызова используется ‘$(MAKE)’ вместо ‘make’ (Jorgen Austvik).
- Определяется _GNU_SOURCE, без которого glibc бесполезна.
- libevent 1.1 разрешено пройти тест компоновки, чтобы позднее можно было вывести сообщение “1.3b+ needed”.
- Устаревший pidfile распознаётся и удаляется.
Спасибо Devrim GUNDUZ и Bjoern Metzdorf за сообщения о проблемах и тестирование.
2008-08-06 - PgBouncer 1.2.2 - «Гигиенический пакет в комплекте»
- Исправления
- Удалён ‘drop_on_error’: это была плохая идея. Параметр добавили как обходной путь для нарушенного поведения кэша планов Postgres, но он мог причинить вред в обычной ситуации, когда некоторые запросы всегда возвращают ошибку.
2008-08-04 - PgBouncer 1.2.1 - «Водонепроницаемый»
- Возможности
- Добавлен параметр ‘drop_on_error’: если сервер выдаёт ошибку, соединение не используется повторно, а закрывается после завершения работы клиента с ним. Это необходимо для обновления кэша планов. Автоматическое обновление не работает даже в 8.3. Значение по умолчанию — 1.
- Исправления
- SHOW SOCKETS/CLIENTS/SERVERS: устранено аварийное завершение, если у сокета нет буфера.
- Исправлен бесконечный цикл SUSPEND при срабатывании suspend_timeout.
- Небольшая очистка
- Для ‘struct iovec’ используется <sys/uio.h>.
- Завершение работы, начатое SIGINT, отменяется при RESUME/SIGUSR2, иначе оно сработало бы при следующем PAUSE.
- Добавлено правильное сообщение журнала при отмене операции консоли.
2008-07-29 - PgBouncer 1.2 - «Обычная волшебная флейта»
PgBouncer 1.2 теперь требует libevent версии 1.3b или новее. Старые версии libevent аварийно завершаются с новым кодом перезапуска.
Возможности
Параметр командной строки (-u) и параметр конфигурации (user=) поддерживают переключение пользователя при запуске. Кроме того, PgBouncer теперь отказывается работать от root.
(Jacob Coby)
Добавлен более подробный текст справки (-h). (Jacob Coby)
Добавлен параметр базы данных connect_query для выполнения запроса в новых соединениях до начала их использования.
(Teodor Sigaev)
Добавлена переменная конфигурации ‘ignore_startup_parameters’, разрешающая и игнорирующая дополнительные параметры пакета запуска. По умолчанию разрешены только ‘database’ и ‘user’, все остальные вызывают ошибку. Это необходимо для чрезмерно инициативного JDBC, безусловно задающего ’extra_float_digits=2’ в пакете запуска.
Ведение журнала в syslog: добавлены параметры syslog=0/1 и syslog_facility=daemon/user/local0.
Менее пугающий перезапуск без остановки обслуживания (-R)
Загрузка FD перенесена до fork, чтобы вывод шёл в консоль и операцию можно было отменить через ^C.
SHUTDOWN остаётся после fork, поэтому ^C будет безопасным.
Выполняется попытка connect() к Unix-сокету, чтобы определить наличие слушателя. Теперь -R можно использовать, даже если предыдущий процесс не работал. Если предыдущий процесс есть, но -R не указан, запуск завершается ошибкой.
Добавлены команды консоли:
SHOW TOTALS показывает сводную статистику, записываемую в журнал, и использование памяти.
SHOW ACTIVE_SOCKETS аналогична SHOW SOCKETS, но оставляет только активные сокеты.
Менее заметные возможности
suspend_timeout закрывает зависшие соединения и затянувшиеся входы, повышая безопасность перезапуска.
Когда удалённая база данных выдаёт ошибку при входе, клиенты получают уведомление.
Удаление базы данных из конфигурации с перезагрузкой работает: все соединения закрываются, а база удаляется.
Для большего сходства с Postgres подделываются некоторые параметры команд SHOW/SET в консоли. Это потребовалось, чтобы psycopg мог подключаться к консоли. (client_encoding/default_transaction_isolation/datestyle/timezone)
server_lifetime=0 теперь закрывает серверное соединение сразу после первого использования. Ранее “0” заставлял PgBouncer игнорировать возраст сервера. Поскольку это поведение не было документировано, зависеть от него никто не должен.
Внутренние улучшения:
Буферы пакетов выделяются лениво и используются повторно. Это должно значительно уменьшить потребление памяти и делает практичным большой pktbuf при множестве соединений.
Внесено множество улучшений обработки ошибок; теперь PgBouncer должен корректно переживать ситуации OOM.
Для управления памятью используется slab-аллокатор.
Выполнена значительная очистка кода.
Исправления
- За один цикл событий выполнялся только один accept(), что могло создавать очередь соединений при большом числе попыток. Теперь прослушивающий сокет всегда опустошается полностью, что должно устранить проблему.
- Обрабатывается EINTR от connect().
- configure.ac совместим с autoconf 2.59.
- Исправлена совместимость с Solaris (Magne Maehre).
PgBouncer 1.1.x
2007-12-10 - PgBouncer 1.1.2 - «Молот»
- Возможности
- Отключения из-за server_lifetime теперь разнесены на (server_lifetime / pool_size) секунд. Это не позволяет PgBouncer создавать всплески повторных подключений.
- Исправления
- Проблемы обновления без остановки обслуживания с 1.0 до 1.1:
- 1.0 не отслеживает параметры сервера, поэтому они остаются NULL, но 1.1 этого не ожидала и аварийно завершалась.
- Если параметры сервера неизвестны, а клиентские заданы, для них выполняется SET вместо сообщения об ошибке.
- Удалены временные отладочные операторы, случайно оставленные в коде на уровне INFO и засорявшие журналы.
- Исправлен debian/changelog.
- Проблемы обновления без остановки обслуживания с 1.0 до 1.1:
- Очистка
- Поля структуры SBuf переставлены для лучшего выравнивания буфера.
2007-10-26 - PgBouncer 1.1.1 - «Пчела-брейкдансер»
- Исправления
- Кэш параметров сервера мог оставаться неинициализированным, вызывая ненужный SET. Это создавало проблему в 8.1, где нельзя изменять standard_conforming_strings. (Спасибо Dimitri Fontaine за сообщение и тестирование.)
- Исправлена документация.
- doc/fixman.py включён в .tgz.
2007-10-09 - PgBouncer 1.1 - «Набор инструментов Безумной Шляпы»
Возможности
Отслеживаются следующие параметры сервера:
client_encoding datestyle, timezone, standard_conforming_stringsУлучшения строки соединения базы данных:
- В host= принимается имя узла.
- В host= принимается пользовательское местоположение Unix-сокета.
- Принимаются значения в кавычках: password=’ asd’‘foo’.
Добавлена переменная конфигурации server_reset_query, отправляемая сразу после освобождения.
Добавлена переменная конфигурации server_round_robin для переключения между LIFO и RR.
Пакет отмены для неактивного соединения больше не закрывает его.
Отмена через ^C из psql работает для SUSPEND / PAUSE.
При запуске выводятся ограничения FD.
При приостановке предпринимается попытка как можно скорее достичь границы пакета.
В параметры базы данных добавлен ’timezone’.
Используется долгоживущий fd файла журнала, повторно открываемый при SIGHUP / RELOAD.
Локальные сведения о конечных точках соединения добавлены в SHOW SERVERS/CLIENTS/SOCKETS.
Очистка кода
- Больше отладочных сообщений журнала содержат сведения о сокете.
- Удалены магические числа и очищены сообщения об ошибках. (David Fetter)
- Добавлена структура-обёртка для текущих сведений о пакете, значительно уменьшающая сложность.
Исправления
- Улучшено обнаружение недопустимых заголовков пакетов.
- Проверка изменения auth_file была нарушена, из-за чего PgBouncer слишком часто перезагружал файл.
PgBouncer 1.0.x
2007-06-18 - PgBouncer 1.0.8 - «Дзюцу лопаты нежити»
- Исправления
- Исправлено аварийное завершение при обработке пакета отмены. (^C из psql)
- Возможности
- Теперь работают PAUSE
; RESUME ;. - Очищен разбор команд консоли.
- Отключена дорогостоящая проверка assert для поиска в списке.
- Теперь работают PAUSE
2007-04-19 - PgBouncer 1.0.7 - «С витаминами A-Z»
- Исправления
- Несколько пакетов ошибок/уведомлений с блокировкой send() между ними вызывали assert. Проблема исправлена полным удалением логики сброса. PgBouncer ничего активно не буферизует, поэтому она не нужна и оставалась со времён, когда буферизация передавалась ядру с MSG_MORE.
- Кроме того, вызов логики recv() не выполняется при разблокировке отправки.
- Код поиска в списке для admin_users и stats_users неверно обрабатывал частичные совпадения. Это исправлено.
- Поиск UID однорангового узла Unix-сокета стандартизирован на getpeereid().
2007-04-12 - PgBouncer 1.0.6 - «Ежедневная доза»
- Исправления
- Исправление «Отключить обслуживание во время перехвата» могло полностью отключить обслуживание. Это исправлено.
- Исправлена компиляция во FreeBSD, где <sys/ucred.h> требует <sys/param.h>. Спасибо Robert Gogolok за сообщение.
2007-04-11 - PgBouncer 1.0.5 - «На сегодня достаточно»
- Исправления
- Исправлены ошибки перезапуска без остановки обслуживания:
- Для неактивных серверов задаётся ->ready.
- Удалён устаревший код из use_client_socket().
- Обслуживание отключается во время перехвата.
- Исправлены ошибки перезапуска без остановки обслуживания:
2007-04-11 - PgBouncer 1.0.4 - «Последняя “последняя” ошибка»
- Исправления
- Уведомление от неактивного сервера помечало сервер как загрязнённый. release_server() этого не ожидал. Теперь такие уведомления отбрасываются.
2007-04-11 - PgBouncer 1.0.3 - «Бесстрашный fork»
Исправления
- В пути входа отсутствовала часть обработки ошибок, поэтому умирающее соединение могло вызывать assert.
- Очищены assert в sbuf.c для более раннего обнаружения проблем.
- При срабатывании Assert() создаётся core.
Новое
- Добавлены переменные конфигурации log_connections, log_disconnections и log_pooler_errors для включения и отключения шума.
- Добавлена переменная конфигурации client_login_timeout для закрытия мёртвых соединений на этапе входа, которые могли блокировать SUSPEND и тем самым перезапуск без остановки обслуживания.
2007-03-28 - PgBouncer 1.0.2 - «Сверхзвуковая ложка»
- Исправления
- libevent может сообщить об удалённом событии в том же цикле. Повторное использование сокета откладывается на один цикл.
- release_server() из disconnect_client() не проверял, был ли пакет действительно отправлен.
2007-03-15 - PgBouncer 1.0.1 - «Инопланетная технология»
Исправления
- Смешанное использование кэшированного и некэшированного времени вместе с беззнаковым typedef usec_t создавало ложные ошибки query_timeout.
- Исправлен редкий случай, когда сокет, разбуженный из ожидания отправки, продолжал зависать.
- Реализована более справедливая очередь серверных соединений. Ранее новый запрос мог получить серверное соединение раньше старого.
- Освобождение сервера откладывается, пока отправка всего содержимого не гарантирована.
Возможности
- Команда SHOW SOCKETS предоставляет подробные сведения о состоянии.
- Указатель PgSocket добавлен в журнал, чтобы отслеживать отдельное соединение.
- В консоли разрешён SELECT вместо SHOW.
- Выполнена различная очистка кода.
2007-03-13 - PgBouncer 1.0 - «Tuunitud bemm»
- Первый публичный выпуск.