Änderungsprotokoll
PgBouncer 1.26.x
2026-09-23 - PgBouncer 1.26.0 - „Alle bisherigen search_path ignorieren“
- Sicherheit
- CVE-2026-19888 behoben: PgBouncer vor 1.26.0 prüfte nicht, ob die SCRAM-Nachricht client-final-message eine Nonce enthielt. Ein nicht authentifizierter Angreifer konnte PgBouncer aus der Ferne zum Absturz bringen, indem er eine client-final-message ohne Nonce sendete. Dies gilt auch für nicht existierende Benutzer, da PgBouncer für diese einen SCRAM-Austausch simuliert. Dieser Fehler bestand seit der Einführung der SCRAM-Unterstützung in PgBouncer 1.11.0.
- CVE-2026-6668 behoben: Ein Ganzzahlüberlauf in der Logik zur Vergrößerung des Paketpuffers konnte PgBouncer vor 1.26.0 in einer Endlosschleife hängen lassen. Dazu musste eine große Datenmenge in einen einzelnen Paketpuffer gesendet werden. Dies ist ohne vorherige Authentifizierung möglich, wenn
max_packet_sizeseinen Standardwert behält. Da PgBouncer nur einen Thread verwendet, konnte es bis zum Beenden des Prozesses keine Clients mehr bedienen. - CVE-2026-6669 behoben: PgBouncer vor 1.26.0 begrenzte die von einem Server akzeptierte SCRAM-Iterationszahl nicht. Ein böswilliger oder kompromittierter PostgreSQL-Server konnte PgBouncer dadurch bei einer einzigen Anmeldung zu unbegrenzt viel Rechenarbeit veranlassen. Währenddessen konnte PgBouncer keine anderen Clients und Datenbanken bedienen. Die Iterationszahl darf jetzt höchstens 1000000 betragen.
- Funktionen
- Alle Parameter, die PostgreSQL standardmäßig meldet, werden nachverfolgt. Insbesondere werden damit
search_path(ab PostgreSQL 18) unddefault_transaction_read_only(ab PostgreSQL 14) jetzt standardmäßig nachverfolgt. Bisher beeinflusste ein Client, der im Transaktions-Pooling-ModusSET search_pathoderSET default_transaction_read_only = trueausführte, andere Clients, die später dieselbe Serververbindung verwendeten. (#1580 , #1573 ) - Die Einstellung
pool_idle_timeoutzum Entfernen längere Zeit ungenutzter Pools hinzugefügt. Dies ist bei Konfigurationen mit vielen verschiedenen Benutzern nützlich, die sich selten verbinden. Ohne diese Einstellung wächst die Anzahl der Pools in solchen Konfigurationen unbegrenzt. Die Einstellung ist standardmäßig deaktiviert, da beim Entfernen eines Pools auch dessen Statistiken verloren gehen. (#1491 ) query_wait_timeoutkann pro Benutzer und pro Datenbank konfiguriert werden. (#1449 )- Die Statistik
client_login_countzuSHOW STATShinzugefügt. Sie zählt erfolgreiche Client-Anmeldungen und ermöglicht es, Clients zu erkennen, die ständig Verbindungen auf- und abbauen. (#1457 ) - Bei der Anmeldung werden PgBouncer-spezifische
ParameterStatus-Nachrichten an Clients gesendet:pgbouncer.version,pgbouncer.pool_modeundpgbouncer.max_prepared_statements. Damit können Clients und Treiber erkennen, dass sie über PgBouncer verbunden sind, und ihr Verhalten entsprechend anpassen. (#1490 ) - Die Einstellung
login_notify_messagehinzugefügt. Ist sie gesetzt, wird ihr Wert nach der Anmeldung als NOTICE-Nachricht an Clients gesendet. Damit lässt sich Clients deutlich machen, dass sie über PgBouncer und nicht direkt mit PostgreSQL verbunden sind. (#1488 ) - Unterstützung für das Bauen von PgBouncer mit meson hinzugefügt, einschließlich eines Windows-Builds mit der UCRT64-Umgebung. Builds mit Autoconf werden weiterhin unterstützt. (#1524 , #1426 , #1568 , #1585 , #1602 , #1607 )
- Ein Logo hinzugefügt. (#1609 )
- Alle Parameter, die PostgreSQL standardmäßig meldet, werden nachverfolgt. Insbesondere werden damit
- Änderungen
- Die veraltete Funktion für Online-Neustarts (
-R, auch als Übernahme bezeichnet) entfernt, zusammen mit den VerwaltungsbefehlenSHOW FDSundSUSPEND, die nur zu ihrer Unterstützung vorhanden waren. Verwenden Sie stattdessen rollierende Neustarts mitso_reuseport. (#1581 ) - Die maximale Passwortlänge auf 65535 Bytes erhöht, entsprechend libpq. (#1310 , #1520 )
- Ein von
auth_queryzurückgegebener BenutzernameNULLwird genauso behandelt wie ein Ergebnis ohne Zeilen und nicht mehr als Fehler. (#1569 ) SET extra_float_digitswird in der Verwaltungsdatenbank akzeptiert. Neuere PostgreSQL-JDBC-Treiber senden diesen Befehl beim Verbindungsaufbau. (#1550 )mkauth.pykann durch Angabe von-als Ausgabedatei nach stdout schreiben. (#1514 )- Bei Builds mit OpenSSL 3 werden bei einem unerwarteten EOF von Clients keine störenden Fehlermeldungen mehr protokolliert. (#1507 )
- Bei Builds mit OpenSSL 3 enthalten TLS-Fehlermeldungen den zugrunde liegenden Systemfehler. (#1492 )
- Ein C11-Compiler ist erforderlich. (#1417 )
- Es wird protokolliert, welches Limit das Verdrängen einer Serververbindung ausgelöst hat. Der Trennungsgrund lautet jetzt
evicted for max_db_connections,evicted for pool_sizeoderevicted for max_user_connectionsstatt lediglichevicted. (#1597 )
- Die veraltete Funktion für Online-Neustarts (
- Fehlerbehebungen
- Behoben, dass verspätete
COPY-Nachrichten im Transaktions-Pooling-Modus den Pool erschöpften. Dadurch funktioniertCOPYin diesem Modus auch außerhalb einer expliziten Transaktion. (#1471 ) - Fehler bei der LDAP-Authentifizierung mit langen DNs durch Erhöhen der maximalen Länge von LDAP-URLs behoben. (#1497 )
- Behoben, dass die SCRAM-Durchleitung zwischengespeicherte Anmeldedaten eines erzwungenen Benutzers beschädigte. Dadurch schlugen Serveranmeldungen fehl, weil der eigentliche Server den SCRAM-Nachweis zurückwies. (#1612 )
- Behoben, dass die SCRAM-Durchleitung mit gespeicherten SCRAM-Secrets nach dem erneuten Verbindungsaufbau zum Server mit dem Fehler “password is SCRAM secret but client authentication did not provide SCRAM keys” fehlschlug. (#1504 , Fehler in 1.25.1 eingeführt)
- Einen Absturz durch Zugriff auf bereits freigegebenen Speicher behoben, wenn ein Replikationsclient die Verbindung trennt, während die Anmeldung seiner Serververbindung noch läuft. (#1577 )
- Das Verdrängen ungenutzter Serververbindungen für Replikationsclients bei vollem Pool korrigiert. Bisher konnte ein einzelner Replikationsclient alle ungenutzten Server im Pool statt nur eines verdrängen. Enthielt der Pool aufgrund des Reservepools oder von Abbruchanfragen mehr Server als
pool_size, wurde hingegen überhaupt keiner verdrängt. (#1597 ) - Hängende TLS-Verbindungen behoben, wenn ein Paket über die Grenze des Paketpuffers hinausreicht, etwa bei
SET application_namemit einem langen Wert. (#1531 ) - Behoben, dass Antworten auf vorbereitete Anweisungen in falscher Reihenfolge gesendet wurden, wenn ein Stapel
Parse- undClose-Nachrichten ohne dazwischenliegendesSyncmischte. (#1555 ) - Fehlerhaftes Verhalten bei Parametern behoben, die in
track_extra_parametersaufgeführt sind, vom Server aber nicht gemeldet werden, wenn ein Client sie in seinem Startpaket setzt. (#1576 ) - Anmeldefehler behoben, wenn der Server seine Anmeldepakete auf mehrere TCP-Pakete verteilt, etwa wenn sich ein weiterer Proxy zwischen PgBouncer und PostgreSQL befindet. (#1446 )
- Behoben, dass
query_timeoutVerbindungen schloss, obwohl keine Abfrage lief. (#1395 ) - Das doppelte Senden einer
NegotiateProtocolVersion-Nachricht behoben, wenn nicht sofort ein Server verfügbar war. (#1460 ) - Behoben, dass die Spalte
pool_sizeinSHOW USERSfür Benutzer einen Wert anzeigte, für die keiner konfiguriert war. (#1489 ) - Die Fehlermeldung für den Verwaltungsbefehl
ENABLEkorrigiert. (#1308 ) - Die Kompilierung mit künftigen OpenSSL-Versionen korrigiert, die
struct asn1_string_stzu einem opaken Typ machen. (#1440 ) - Verhindert, dass der Compiler das Löschen sensibler kryptografischer Daten vom Stack wegoptimiert. (#1508 )
- Das Linken von
pgbevent.dllmit clang unter Windows korrigiert. (#1571 ) - Pfade von Dateien auf der obersten Ebene des Release-Tarballs korrigiert, die als
pgbouncer-X.Y.Z/./configurestatt alspgbouncer-X.Y.Z/configuregespeichert waren. (#1549 ) - Ein Speicherleck beim Lesen von
track_extra_parametersaus der Konfiguration behoben. (#1510 ) - Ein Speicherleck für jedes Startpaket behoben, das einen Protokollerweiterungsparameter (Präfix
_pq_.) enthielt. Es konnte von nicht authentifizierten Clients ausgelöst werden. (#1540 )
- Behoben, dass verspätete
PgBouncer 1.25.x
2026-05-08 - PgBouncer 1.25.2 - „Eine menschliche Note und eine neue Wendung im Titelrennen voller Ungewissheiten“
-
Sicherheit
- CVE-2026-6664 behoben: Ein Ganzzahlüberlauf beim Parsen von Netzwerkpaketen in PgBouncer vor 1.25.2 umgeht eine Bereichsprüfung und kann zu einem Absturz führen. Ein nicht authentifizierter Angreifer kann PgBouncer aus der Ferne mit einem fehlerhaften SCRAM-Authentifizierungspaket zum Absturz bringen.
- CVE-2026-6665 behoben: Der SCRAM-Code in PgBouncer vor 1.25.2 prüfte beim Erstellen des Inhalts der SCRAM-Nachricht client-final-message den Rückgabewert von
strlcat()nicht korrekt. Ein böswilliges Backend, das eine SCRAM-Nachricht server-final-message mit einer langen Nonce sendet, kann einen Stack-Überlauf auslösen. - CVE-2026-6666 behoben: Eine mögliche Nullzeigerreferenz in PgBouncer vor 1.25.2 konnte zu einem Absturz führen, wenn ein Server eine Fehlerantwort ohne SQLSTATE-Feld sendet.
- CVE-2026-6667 behoben: PgBouncer vor 1.25.2 führte für den Verwaltungsbefehl
KILL_CLIENTkeine angemessene Berechtigungsprüfung durch. Alle Benutzer mit Zugriff auf die Verwaltungskonsole, der selbst eine Berechtigung erfordert, konnten diesen Befehl ausführen. Er sollte nur Benutzern erlaubt sein, die im Parameteradmin_usersaufgeführt sind.
-
Fehlerbehebungen
- Die Dokumentation des Parameters
default_pool_sizepräzisiert. - Die Dokumentation zu
client_tls13_ciphersundserver_tls13_cipherskorrigiert.
- Die Dokumentation des Parameters
2025-12-03 - PgBouncer 1.25.1 - „Vor Weihnachten noch etliche Fehler beheben“
-
Sicherheit
-
CVE-2025-12819 behoben: Vor dieser Version konnte ein nicht authentifizierter Angreifer während der Authentifizierung beliebiges SQL ausführen, indem er in der StartupMessage einen bösartigen search_path-Parameter übergab. Systeme, bei denen ALLE folgenden Konfigurationen vorliegen, sind betroffen:
track_extra_parametersenthält search_path (keine Standardkonfiguration; vermutlich nur bei Konfigurationen mit Citus oder PostgreSQL 18 eingestellt)auth_userist auf eine nicht leere Zeichenkette gesetzt (keine Standardkonfiguration)auth_queryist ohne vollständig qualifizierte Objektnamen konfiguriert (Standardkonfiguration; der Operator < ist nicht mit einem Schema qualifiziert)
-
-
Fehlerbehebungen
- Fehler bei der Ad-hoc-SCRAM-Authentifizierung nach erneutem Verbindungsaufbau zum Server behoben (#1432 , in 1.25.0 eingeführt)
- Fehlende Typdefinitionen für ungewöhnliche Architekturen ohne SIMD-Unterstützung hinzugefügt (#1414 , in 1.25.0 eingeführt)
- Störende Warnmeldung entfernt, wenn der Client die Verbindung schließt, bevor er Daten sendet (#1420 , in 1.25.0 eingeführt)
- Eine mögliche Dereferenzierung eines NULL-Zeigers verhindert (#1423 , in 1.25.0 eingeführt)
- Ein mögliches Speicherleck behoben (#1422 , in 1.25.0 eingeführt)
- Das Parsen von SCRAM-Servernachrichten korrigiert (#1431 , in 1.25.0 eingeführt)
2025-11-09 - PgBouncer 1.25.0 - „Die Version mit LDAP-Unterstützung“
- Funktionen
- LDAP-Authentifizierung hinzugefügt! Sie lässt sich über eine HBA-Datei oder
auth_ldap_optionskonfigurieren. (#731 ) - Unterstützung für direkte TLS-Verbindungen auf der Clientseite hinzugefügt. Dadurch können Clients den schnelleren TLS-Verbindungsaufbau verwenden, der in PostgreSQL 17 eingeführt wurde. PgBouncer kann sich mit diesem schnelleren Verfahren (noch) nicht mit PostgreSQL-Servern verbinden. (#1359 )
- Den Zustand idle zu
SHOW CLIENTShinzugefügt. (#1191 ) - Die Einstellung
transaction_timeouthinzugefügt, sowohl global als auch auf Benutzerebene. (#1242 ) - Eine NOTICE-Nachricht wird an einen Client gesendet, wenn er länger als 5 Sekunden in der Warteschlange steht, ohne eine Verbindung zu erhalten. Mit
query_wait_notifylässt sich diese Dauer ändern oder die Benachrichtigung deaktivieren. (#1264 ) - Die Einstellung
scram_iterationshinzugefügt, damit Betreiber zwischen Sicherheit und Authentifizierungsgeschwindigkeit abwägen können (#1339 ) client_tls13_ciphersundserver_tls13_cipherszur Auswahl der zu aktivierenden TLSv1.3-Cipher-Suites hinzugefügt. (#1352 )
- LDAP-Authentifizierung hinzugefügt! Sie lässt sich über eine HBA-Datei oder
- Änderungen
- Die Leistung der Ad-hoc-SCRAM-Authentifizierung erheblich verbessert. (#1338 )
KILLkann ohne Angabe einer Datenbank ausgeführt werden. Dies bedeutet jetzt, dassKILLfür alle Datenbanken ausgeführt wird. (#1317 )- Die Health-Check-Abfrage sendet standardmäßig eine leere Abfrage statt
SELECT 1. (#1233 ) - Die vollständige PAM-Warteschlange wird als Warnung protokolliert. Dadurch lässt sich die Ursache der hierdurch verlangsamten Abfragen leichter ermitteln. (#1297 )
- Der Befehl
RELOADmeldet jetzt alle beim Neuladen aufgetretenen Fehler. (#1231 ) - Während des Herunterfahrens bleibt der PgBouncer-Unix-Socket für Verwaltungsverbindungen zugänglich. So können Betreiber leichter ermitteln, warum ein PgBouncer-Prozess nicht herunterfährt, und/oder für festhängende Verbindungen manuell
KILL_CLIENTausführen. (#1305 ) mkauth.pyso geändert, dass kein veraltetes drittes Feld mehr hinzugefügt wird (#1365 )- Die
FATAL-Meldungen in den Funktionendisconnect_clientunddisconnect_serververbessert. (#1382 ) - Die veraltete OpenSSL-Funktion
EVP_PKEY_get0_EC_KEYwird nicht mehr verwendet. Sie konnte bei bestimmten FIPS-Implementierungen Probleme verursachen. (#1384 )
- Fehlerbehebungen
- Einen Absturz bei langen Passwörtern (1024 Zeichen oder mehr) behoben. (#1215 )
- Verbindungen mit mehreren Hosts bei Verwendung von
server_tls_sslmode=verify-fullkorrigiert. (#1303 ) - Einen seltenen
FATAL-Fehler beim Weiterleiten von Abbruchanfragen behoben. (#1383 ) - Die Sortierung der Parameter in
SHOW CONFIGkorrigiert. (#1403 ) - Das Parsen des Startpakets robuster gemacht. (#1407 )
PgBouncer 1.24.x
2025-04-16 - PgBouncer 1.24.1 - „CVE-2025-2291 VALID UNTIL gestern“
-
Sicherheit
- CVE-2025-2291 behoben: Bisher berücksichtigte PgBouncer beim Abrufen von Passwort-Hashes mit auth_query nicht den Wert VALID UNTIL eines Benutzerpassworts. Wurde PgBouncer als transparenter Proxy vor Postgres eingesetzt, konnte es daher bereits abgelaufene Passwörter akzeptieren. Zur Behebung wurden die standardmäßige auth_query und die Beispiele für benutzerdefinierte auth_query-Funktionen in der Dokumentation so geändert, dass sie VALID UNTIL berücksichtigen. Wenn Sie eine benutzerdefinierte auth_query verwenden, sollten Sie diese entsprechend aktualisieren. Bei Verwendung der standardmäßigen auth_query können Sie entweder auf PgBouncer 1.24.1 aktualisieren oder die Konfiguration einer älteren PgBouncer-Version so ändern, dass sie die neue standardmäßige auth_query verwendet.
-
Fehlerbehebungen
- Die PAM-Unterstützung repariert, indem die Unterstützung für
pam-Authentifizierung in HBA-Dateien zurückgenommen wurde. (#1291 ) (Fehler in 1.24.0 eingeführt) - Einen Fehler beim Verringern des Zählers für Benutzerverbindungen behoben. Diese Korrektur war im Tag 1.24.0 auf GitHub enthalten, fehlte aber im Release-Tarball. (#1238 ) (Fehler in 1.24.0 eingeführt)
test_load_balance_hosts.pyzum Tarball hinzugefügt. (#1282 )- Probleme in Tests behoben, damit Debian-Paketbetreuer sie ausführen können. (#1266 , #1250 )
- Die PAM-Unterstützung repariert, indem die Unterstützung für
-
Dokumentation
- Das Beispiel für
auth_queryaktualisiert, sodass es einen sicherensearch_pathsetzt. (#1245 )
- Das Beispiel für
2025-01-10 - PgBouncer 1.24.0 - „Neues Jahr, neuer Türsteher“
-
Funktionen
- Unterstützung für
Type=notify-reloadfür systemd hinzugefügt. Dies erfordert systemd ab Version 253. (#1148 ) - Den Befehl
KILL_CLIENTzur Verwaltungskonsole hinzugefügt. Damit lässt sich eine Clientverbindung zwangsweise beenden. (#1147 ) - Die Einstellung
max_user_client_connectionshinzugefügt, sowohl global als auch auf Benutzerebene. (#1137 ) - Die Einstellung
max_db_client_connectionshinzugefügt, sowohl global als auch auf Datenbankebene. (#1138 ) - Den Zähler
current_client_connectionszur Ausgabe vonSHOW USERSundSHOW DATABASEShinzugefügt. (#1137 , #1138 ) - Den Parameter
load_balance_hostshinzugefügt, mit dem sich festlegen lässt, dass keine Lastverteilung zwischen Hosts erfolgt. (#736 ) - Nutzungszähler für vorbereitete Anweisungen in
SHOW STATSverfügbar gemacht. (#1192 ) - Die Einstellung
client_idle_timeouthinzugefügt. (#1189 ) query_timeoutundreserve_pool_sizeauf Benutzerebene hinzugefügt. (#1180 , #1228 )- Unterstützung für
pam-Authentifizierung in HBA-Dateien aktiviert. (#326 )
- Unterstützung für
-
Änderungen
- Verbindungen werden bei RELOAD nicht erneuert, wenn die TLS-Konfiguration unverändert ist. Bisher wurden bei RELOAD alle vorhandenen TLS-Verbindungen erneuert, was zu einem vorübergehenden, aber erheblichen Leistungseinbruch führen konnte. Dies geschieht jetzt nur noch, wenn sich die TLS-Einstellungen tatsächlich ändern. (#1157 )
- Die Unterstützung vorbereiteter Anweisungen ist standardmäßig aktiviert;
max_prepared_statementsist jetzt standardmäßig auf 200 gesetzt. Diese Änderung der Standardwerte sollte nur Clients betreffen, die tatsächlich vorbereitete Anweisungen verwenden. Wenn Sie vorbereitete Anweisungen verwenden, empfiehlt es sich, die Einschränkungen dieser Unterstützung in unserer Dokumentation zu lesen. (#1144 ) - Sockets, Clients und Server lassen sich in der Verwaltungsausgabe jetzt anhand einer eindeutigen ID identifizieren. Bisher dienten dazu ihre Zeiger, die nach dem Trennen der Verbindung jedoch häufig für neue Clients wiederverwendet wurden. (#1172 )
- Klarere Fehlermeldung für eine leere PID-Datei. (#1195 )
- Bei einem Fehlschlag von
server_login_retrywird der ursprüngliche Fehler an den Client zurückgegeben. (#1152 ) - Bei einem Fehler in
auth_querywird der ursprüngliche Serverfehler protokolliert. (#1187 ) - Der Wert 0 für
default_pool_sizebedeutet unbegrenzte Größe. (#1227 ) - Die Datenbankeinstellung
reserve_poolinreserve_pool_sizeumbenannt. Der bisherige Name bleibt als Alias für den neuen Namen erhalten. (#1232 )
-
Fehlerbehebungen
- Verschiedene unwahrscheinliche Fehlerfälle, etwa OOM-Fehler, werden besser behandelt. Sie konnten zuvor Abstürze oder Speicherlecks verursachen. (#1108 , #1101 , #1099 , #1169 , #1202 )
- Den Standardwert für
server_tls_sslmodein der Beispielkonfiguration korrigiert. (#1133 ) - Den Hinweis auf einen ungültigen Alias für
server_tls_protocolsaus der Dokumentation entfernt. (#1155 ) - Einen Fehler bei gleichzeitiger Verwendung von
auth_queryund Replikationsverbindungen behoben. Er führte in solchen Konfigurationen zu Verbindungsfehlern. (#1166 ) - Abbruchanfragen von Clients werden ignoriert, während PgBouncer Servereinstellungen konfiguriert. (#298 )
PgBouncer 1.23.x
2024-08-02 - PgBouncer 1.23.1 - „Alles wieder in Ordnung“
- Fehlerbehebungen
- Einen möglichen Speicherzugriffsfehler nach dem Neuladen der PgBouncer-Konfiguration behoben. (#1105 ) (Fehler in 1.23.0 eingeführt)
- Alle bekannten Abstürze in put_in_order behoben. (#1120 ) (neue Abstürze wurden in 1.23.0 eingeführt)
- Fehlende, für Tests benötigte Dateien zum Release-Tarball hinzugefügt. (#1124 ) (die Dateien fehlten seit 1.23.0)
2024-07-03 - PgBouncer 1.23.0 - „Auf zu neuen Anfängen“
-
Funktionen
- Unterstützung für rollierende Neustarts hinzugefügt. SIGTERM fährt den PgBouncer-Prozess
nicht mehr sofort herunter. Stattdessen erfolgt jetzt ein „besonders sicheres Herunterfahren“:
Vor dem Herunterfahren wird gewartet, bis alle Clients ihre Verbindung getrennt haben.
Das neue SIGTERM-Verhalten ermöglicht rollierende Neustarts mehrerer PgBouncer-Prozesse
hinter einem Load-Balancer oder mehrerer Prozesse, die mit
so_reuseportam selben Port lauschen. Dies ist eine kleine inkompatible Änderung. Wenn Sie sich in Ihrer Dockerfile- oder Systemd-Service-Datei auf das bisherige SIGTERM-Verhalten verlassen haben, sollten Sie jetzt SIGQUIT verwenden. (#902 ) - Unterstützung für Benutzernamenzuordnungen bei den Authentifizierungsmethoden
certundpeerhinzugefügt. Diese Funktion bietet die Flexibilität, dass der die Verbindung aufbauende Benutzer nicht dem Datenbankbenutzer entsprechen muss. Benutzernamenzuordnungen in PgBouncer funktionieren sehr ähnlich wie in Postgres, mit den in der Dokumentation aufgeführten Ausnahmen. (#996 ) - Unterstützung für Replikationsverbindungen über PgBouncer hinzugefügt. (#876 )
- Unterstützung für rollierende Neustarts hinzugefügt. SIGTERM fährt den PgBouncer-Prozess
nicht mehr sofort herunter. Stattdessen erfolgt jetzt ein „besonders sicheres Herunterfahren“:
Vor dem Herunterfahren wird gewartet, bis alle Clients ihre Verbindung getrennt haben.
Das neue SIGTERM-Verhalten ermöglicht rollierende Neustarts mehrerer PgBouncer-Prozesse
hinter einem Load-Balancer oder mehrerer Prozesse, die mit
-
Änderungen
- Die Verbindungsliste in der Ausgabe von
SHOW USERSverbessert. (#1040 ) pool_sizekann pro Benutzer konfiguriert werden. (#1049 )server_lifetimekann pro Datenbank konfiguriert werden. (#1057 )- Unterstützung für die Auflistung dynamisch erzeugter Benutzer in der Ausgabe von
SHOW USERShinzugefügt. (#1052 ) - Unterstützung für den Adresstyp
allin der hba-Konfiguration hinzugefügt. (#1078 ) - Unterstützung für automatische Neustarts bei Verwendung von systemd hinzugefügt. (#1080 )
- Die erforderliche Mindestversion von c-ares auf 1.9.0 erhöht (#1076 )
- Die Verbindungsliste in der Ausgabe von
-
Fehlerbehebungen
- Probleme bei der Verarbeitung großer und unvollständiger Startpakete behoben. (#1058 )
- Unterstützung für das Format
--config=valueim Startparameter options hinzugefügt. (#1064 ) - Die Berechnung der Metrik
avg_wait_timekorrigiert. (#727 ) - Unterstützung für das Aushandeln der Postgres-Protokollversion mit dem Client hinzugefügt. (#1007 )
- Die Erfassung einer ausstehenden Anfrage für
auth_queryhinzugefügt. (#1034 ) - Mehrere Verbesserungen an Dokumentation und CI.
PgBouncer 1.22.x
2024-03-04 - PgBouncer 1.22.1 - „Sommer in Bangalore“
- Fehlerbehebungen
- Probleme behoben, die von manchen Clients durch
COPY FROM STDIN-Abfragen verursacht wurden. Solche Abfragen konnten Speicherlecks, Leistungseinbußen und Fehlverhalten bei vorbereiteten Anweisungen verursachen. (#1025 ) (Fehler in 1.21.0 eingeführt) - Fehlende Tests zum Release-Tarball hinzugefügt (#1026 ) (die Tests fehlten seit 1.19.0 & 1.21.0)
- Probleme behoben, die von manchen Clients durch
2024-01-31 - PgBouncer 1.22.0 - „DEALLOCATE ALL“
-
Funktionen
-
Änderungen
-
Fehlerbehebungen
PgBouncer 1.21.x
2023-10-16 - PgBouncer 1.21.0 - „Die Version mit vorbereiteten Anweisungen“
-
Funktionen
- Unterstützung für benannte vorbereitete Anweisungen auf Protokollebene hinzugefügt!
Dies ist vermutlich eine der am häufigsten gewünschten PgBouncer-Funktionen.
Vorbereitete Anweisungen zusammen mit PgBouncer können die CPU-Last des Systems
erheblich senken, sowohl auf der PgBouncer- als auch auf der PostgreSQL-Seite.
In synthetischen Benchmarks erhöhte diese Funktion den Abfragedurchsatz je nach
Arbeitslast um 15% bis 250%. Um die neue Funktion zu nutzen, müssen Sie die neue
Einstellung
max_prepared_statementsauf einen Wert ungleich null setzen. Der genaue Wert hängt von der Arbeitslast ab, aber 100 dürfte angemessen sein. Einzelheiten zu Funktionsweise, Einschränkungen und Optimierung des Werts enthält die Dokumentation zumax_prepared_statements. Anschließend müssen Sie sicherstellen, dass Ihre Clientbibliothek tatsächlich vorbereitete Anweisungen verwendet. Wie dies geschieht, unterscheidet sich je nach Client; Sie sollten daher die Dokumentation des verwendeten Clients heranziehen. Die Funktion wurde vor der Veröffentlichung sehr gründlich getestet. Aufgrund ihrer Komplexität können jedoch durchaus noch Leistungsprobleme oder Fehler vorhanden sein. Bitte melden Sie solche Probleme, wenn Sie sie entdecken. (#845 )
- Unterstützung für benannte vorbereitete Anweisungen auf Protokollebene hinzugefügt!
Dies ist vermutlich eine der am häufigsten gewünschten PgBouncer-Funktionen.
Vorbereitete Anweisungen zusammen mit PgBouncer können die CPU-Last des Systems
erheblich senken, sowohl auf der PgBouncer- als auch auf der PostgreSQL-Seite.
In synthetischen Benchmarks erhöhte diese Funktion den Abfragedurchsatz je nach
Arbeitslast um 15% bis 250%. Um die neue Funktion zu nutzen, müssen Sie die neue
Einstellung
-
Änderungen
- Die Sicherheit der OpenSSL-Einstellungen verbessert; die verwendeten Standardwerte waren SEHR veraltet. Ab dieser Version entsprechen die Standardwerte den OpenSSL-Standardwerten des Systems, auf dem PgBouncer läuft. (#948 & libusual/#41 )
- PgBouncer verwendet jetzt nach Möglichkeit OpenSSL zur Berechnung von MD5-Hashes. Dies ist für einen FIPS-konformen Einsatz von PgBouncer erforderlich. (#949 )
min_pool_sizewird bei Pools mit einem erzwungenen Benutzer auch dann eingehalten, wenn keine Clients mit PgBouncer verbunden sind (#947 )- Die Kodierung von
peer_idim Abbruch-Token durch PgBouncer wurde geändert. Deshalb funktioniert das Peering zwischen unterschiedlichen PgBouncer-Versionen nicht, wenn sie nicht alle auf derselben Seite der Versionsgrenze v1.21.0 liegen. (#945 )
-
Fehlerbehebungen
- Den Absturz mit der Fehlermeldung “FATAL in function client_proto(): bad client state: 6/7” behoben (#928 ) (Fehler in 1.18.0 eingeführt)
- Den Absturz mit der Fehlermeldung “FATAL in function server_proto(): server in bad state: 11” behoben (#927 ) (Fehler in 1.18.0 eingeführt)
- Die Protokollierungsstufe für das Senden von Abbruchanfragen verringert (#903 )
- Das slog-Protokollpräfix für Peers korrigiert (#922 )
- Tippfehler in der Dokumentation korrigiert (#932 )
- Von der statischen Analyse erkannte Fehler behoben (#943 )
- Bei vorübergehenden FATAL-Fehlern während der Anmeldung werden nicht alle wartenden Clients beendet (#946 )
- Eine automatisch erzeugte Datenbank wird verwendet, wenn die Datenbank in
auth_dbnamenicht explizit konfiguriert ist (#921 )
-
Bereinigungen
- Die Unterstützung für udns entfernt (#938 )
PgBouncer 1.20.x
2023-08-09 - PgBouncer 1.20.1 - „Optionale Optionen“
- Fehlerbehebungen
2023-07-20 - PgBouncer 1.20.0 - „Hier gehört ein lustiger Name hin“
-
Abkündigungen
- Die Option für Online-Neustarts gilt jetzt als veraltet. Diese Funktion wurde in den letzten
Jahren kaum gepflegt. Sie hat mehrere bekannte Probleme, und neu hinzugefügte Funktionen
unterstützen sie häufig nicht. Heute wird für Online-Neustarts die Verwendung der Funktionen
so_reuseportundpeersempfohlen. Damit können mehrere unterschiedliche PgBouncer-Prozesse am selben Port laufen. Indem Sie diese Prozesse nacheinander neu starten, können Sie sicherstellen, dass immer ein PgBouncer-Prozess am gewünschten Port lauscht. (#894 )
- Die Option für Online-Neustarts gilt jetzt als veraltet. Diese Funktion wurde in den letzten
Jahren kaum gepflegt. Sie hat mehrere bekannte Probleme, und neu hinzugefügte Funktionen
unterstützen sie häufig nicht. Heute wird für Online-Neustarts die Verwendung der Funktionen
-
Funktionen
track_extra_parameterseingeführt, um im Transaktions-Pooling-Modus weitere Parameter nachverfolgen zu können. Bisher verfolgte PgBouncer nurapplication_name,DateStyle,TimeZoneundstandard_conforming_strings. Jetzt wird auchIntervalStylestandardmäßig nachverfolgt. Durch Ändern vontrack_extra_parameterslassen sich weitere Einstellungen nachverfolgen, jedoch nur solche, die PostgreSQL an den Client zurückmeldet . Bei Verwendung von Citus 12.0+ sorgt Citus dafür, dass PostgreSQL auchsearch_pathan den Client zurückmeldet. Wenn Sie Citus verwenden, können Sie deshalbsearch_pathzur Einstellungtrack_extra_parametershinzufügen. (#867 )- SQLSTATE wird während der Authentifizierung weitergeleitet. Dadurch lässt sich erkennen, ob eine Datenbank nicht existiert, wie es Npgsql (ein .NET-Datenprovider für PostgreSQL) tut. (#814 )
- Den Standardwert von
server_tls_sslmodeaufprefergeändert. (#866 ) - Unterstützung für den Startparameter
optionshinzugefügt. Dies ermöglicht die Verwendung der UmgebungsvariablePGOPTIONS, diepsqlundlibpqunterstützen . Mit dieser Variable lassen sich beliebige PostgreSQL-Parameter beim Start setzen. Dies funktioniert nur für PostgreSQL-Parameter, die PgBouncer übertrack_extra_parametersnachverfolgt. (#878 )
-
Fehlerbehebungen
- Kein Absturz mehr, wenn die Verwaltungsdatenbank
pgbouncerals auth_dbname verwendet wird. Dies wird weiterhin nicht unterstützt, führt jetzt aber zu einer klaren Fehlermeldung statt zu einem Absturz. (#817 ) - Den Namen von
peer_cacheinSHOW MEMkorrigiert. Bisher wurde er fälschlich alsdb_cacheangezeigt. (#864 ) - Die Verwechslung von src/dst im Protokoll korrigiert. PgBouncer protokollierte eine Quell-IP, obwohl die Ziel-IP gemeint war. (#880 )
- Verwaltungsverbindungen über Unix-Sockets werden nur protokolliert, wenn
log_connectionsauf1gesetzt ist. (#883 )
- Kein Absturz mehr, wenn die Verwaltungsdatenbank
PgBouncer 1.19.x
2023-05-31 - PgBouncer 1.19.1 - „Sonniger Frühling“
Dies ist eine Wartungsversion, die einige kürzlich eingeführte Fehler behebt:
- Fehlerbehebungen
- Behoben: FATAL in function disconnect_client(): bad client state: 0 (#846 ) (Fehler in 1.18.0 eingeführt)
- Behoben: FATAL in function server_proto(): server in bad state: 14 (#849 ) (Fehler in 1.18.0 eingeführt)
- Für die Ausführung der Python-Tests erforderliche Dateien zum Release-Tarball hinzugefügt (#852 ) (neue Tests in 1.19.0 eingeführt)
2023-05-04 - PgBouncer 1.19.0 - „Auf die altmodische Art, von Menschen gemacht“
-
Funktionen
- Die Option
auth_dbnamehinzugefügt. Sie legt fest, in welcher Datenbankauth_queryausgeführt wird. (#764 ) - Den Befehl
SHOW STATEhinzugefügt. Er zeigt an, ob PgBouncer aktiv, pausiert oder angehalten ist. (#528 ) - Unterstützung für Peering zwischen PgBouncer-Prozessen hinzugefügt. Damit lässt sich PgBouncer so konfigurieren, dass Abbruchanfragen auch dann weiter funktionieren, wenn sich mehrere unterschiedliche PgBouncer-Prozesse hinter einem einzigen Load-Balancer befinden. (#666 )
- Eine eigene Einstellung
cancel_wait_timeouthinzugefügt. Sie bestimmt, nach welcher Zeit das Weiterleiten einer Abbruchanfrage aufgegeben wird. Der Standardwert beträgt 10 Sekunden. (#833 ) - Neues Testframework (#792 )
- Die Option
-
Fehlerbehebungen
- Ein mögliches Speicherleck bei fehlgeschlagenem TLS-Handshake behoben. (#796 )
- Genauere Fehlermeldungen für nicht unterstützte Befehlszeilenoptionen unter Windows. (#620 )
- Den Aufruf von
disconnect_serverfür einen Server im ZustandBEING_CANCELEDkorrigiert. (#815 ) (in 1.18.0 eingeführt) - Beim Empfang von
SIGTERMwird PgBouncer nicht mit einem Status ungleich null beendet. (#834 ) - Der Start wird mit einem Fehler abgebrochen, wenn ein Socket in
unix_socket_dirnicht erstellt werden konnte. (#830 ) - Der Start wird mit einem Fehler abgebrochen, wenn an keiner der Adressen in
listen_addrgelauscht werden konnte. (#838 ) - Beim Fehlschlagen von
sbuf_connectwerden mehr Warnungen mit zusätzlichen Informationen ausgegeben. Dies ist besonders hilfreich, wenn das Erstellen von Unix-Sockets fehlschlägt. (#837 )
-
Bereinigungen
- Verschiedene CI-Aktualisierungen für bessere Leistung
- AppVeyor entfernt
PgBouncer 1.18.x
2022-12-12 - PgBouncer 1.18.0 - „Kein echtes Rätsel“
-
Funktionen
-
Fehlerbehebungen
- Die Operation
sbuf_send_pendingschlägt fehl, wenn der Ziel-Socket geschlossen ist (#652 ) - Einige mögliche Abstürze behoben (#700 , #730 )
- Einen Überlauffehler bei der Funktion für kommagetrennte Hostlisten behoben, der die Verbindung auf einen Unix-Socket umleitete (#747 )
- Verbindungen werden nicht verdrängt, um
min_pool_sizezu erreichen (#648 ) SHOW HELPmit PostgreSQL 15 korrigiert (#769 )- Eine Race Condition bei der Verarbeitung von Abbruchanfragen für Abfragen behoben. Eine Abbruchanfrage für einen Client konnte die Abfrage eines anderen Clients abbrechen. Dies konnte geschehen, wenn PgBouncer die Abbruchanfrage erst erhielt, nachdem die eigentlich abzubrechende Abfrage bereits von selbst abgeschlossen war. (#717 )
- Die Operation
-
Bereinigungen
- Verschiedene CI-Aktualisierungen
PgBouncer 1.17.x
2022-03-23 - PgBouncer 1.17.0 - „Eine Grenze wurde gezogen“
-
Funktionen
- Eine Datenbankdefinition kann eine kommagetrennte Hostliste angeben. Die Verbindungen zu den Hosts werden im Round-Robin-Verfahren hergestellt.
- Beim Verbinden mit einer nicht existierenden Datenbank wird der Fehler (“no such database”) jetzt erst nach der Authentifizierung gemeldet. Dies verhindert, dass nicht authentifizierte Clients auskundschaften können, welche Datenbanken existieren. (Dies ähnelt der Änderung in Version 1.15.0, fehlende Benutzer erst nach der Authentifizierung zu melden.)
- Fehler beim Trennen einer Serververbindung werden vor der Anmeldung nicht an den Client gesendet. Sie könnten einem noch nicht angemeldeten Client Informationen offenlegen, die nicht uneingeschränkt öffentlich sind, etwa Konfigurationsdetails.
- Die maximale Passwortlänge erneut erhöht. Offenbar reichte die letzte Erhöhung nicht lange genug aus.
- Das automatische Neuladen von
auth_fileentfernt.auth_filewird jetzt nur noch beim Neuladen der Konfigurationsdatei erneut gelesen, nicht mehr automatisch bei jeder Änderung. - Der Windows-Build enthält jetzt eine Ressourcendatei mit Versionsinformationen.
- Die in der CI erstellten Windows-Builds sind jetzt statisch gelinkt und können daher ohne weitere Abhängigkeiten direkt verwendet werden.
-
Fehlerbehebungen
- Die Unterstützung für OpenSSL 3 korrigiert. Frühere Versionen stürzten ab.
- Die Fail-Fast-Logik wird beim Verbindungsaufbau nicht angewendet. Dies ist Teil der oben genannten Änderung, Serverfehler nicht vor der Authentifizierung zu melden. Es behebt außerdem einen besonderen Fall bei der SCRAM-Durchleitung: Der clientseitige Authentifizierungsaustausch muss zugelassen werden, damit die serverseitige Verbindung durch erneute Authentifizierung repariert werden kann. Der Fail-Fast-Mechanismus greift weiterhin unmittelbar nach der Authentifizierung, sodass das tatsächlich beobachtete Verhalten in den meisten Fällen gleich bleibt.
auth_typein der Beispielkonfigurationpgbouncer.iniaufmd5geändert, entsprechend dem eingebauten Standardwert. Manche setzen diese Datei als Standardkonfiguration ein; prüfen Sie daher, ob die geänderte Konfiguration für Ihren Einsatz weiterhin sinnvoll ist.- Einen Absturz beim Beenden von Builds mit aktivierten Assertions behoben.
- Dokumentation und Verhalten von
tcp_defer_acceptverbessert. Die Angaben zum Standardwert waren falsch und irreführend. In manchen Fällen zeigte “show config” den falschen Wert. Ist die Option gesetzt, wird aber nicht unterstützt, wird jetzt außerdem ein Fehler ausgegeben, statt sie zu ignorieren; dies entspricht der Behandlung anderer plattformspezifischer Socket-Optionen. - Den Build mit c-ares unter Windows korrigiert. Unter Windows ist jetzt c-ares >=1.18.0 erforderlich.
-
Bereinigungen
- Die meisten Warnungen zu veralteten Funktionen von Autoconf >=2.70 beseitigt. Ältere Autoconf-Versionen werden weiterhin unterstützt.
- Den Einsatz von Cirrus CI auf weitere Plattformen ausgeweitet.
- Die Unterstützung für Travis CI entfernt.
- Die Suchorte für die standardmäßige Root-CA-Datei aktualisiert, um weitere Plattformen wie Fedora/RHEL/CentOS abzudecken.
- Alle Python-Skripte verwenden jetzt standardmäßig
python3. Die Kompatibilität mit Python 2 wird nicht mehr gepflegt. - Die Skripte der Testsuite verwenden
command -vstatt des veraltetenwhich. - Mehrere Fehlermeldungen umformuliert, damit deutlicher wird, auf welchen Befehl oder welche Konfigurationseinstellung sie sich beziehen.
- Die Skripte der Testsuite benötigen GNU sed nicht mehr.
make checkfunktioniert jetzt unter Windows (die SSL-Testsuite allerdings noch nicht).- Dokumentiert, dass die Verwaltungskonsole nur das einfache Abfrageprotokoll unterstützt, und diesbezügliche Fehlermeldungen verbessert.
PgBouncer 1.16.x
2021-11-11 - PgBouncer 1.16.1 - „Tiefgang auf dem Prüfstand gegen stille Effizienz“
Dies ist eine Wartungsversion mit einer Sicherheitskorrektur.
-
PgBouncer weist in seiner Rolle als Server zusätzliche Daten nach einem SSL- oder GSS-Verschlüsselungs-Handshake zurück.
Ein Man-in-the-Middle-Angreifer, der Daten in die TCP-Verbindung einschleusen kann, konnte Klartextdaten am Anfang einer vermeintlich durch Verschlüsselung geschützten Datenbanksitzung platzieren. Dies ließ sich zum Senden gefälschter SQL-Befehle an den Server missbrauchen, allerdings nur, wenn PgBouncer keine Authentifizierungsdaten verlangte. (Eine PgBouncer-Konfiguration mit SSL-Zertifikatsauthentifizierung könnte tatsächlich darauf verzichten.) (CVE-2021-3935)
2021-08-09 - PgBouncer 1.16.0 - „Einen Jaguar abgewehrt“
-
Funktionen
- Das Neuladen von TLS-Einstellungen im laufenden Betrieb wird unterstützt. Beim Neuladen der Konfigurationsdatei werden geänderte TLS-Einstellungen automatisch wirksam.
- Unterstützung für abstrakte Unix-Domain-Sockets hinzugefügt. Stellen Sie einem
Unix-Domain-Socket-Pfad
@voran, um einen Socket im abstrakten Namensraum zu verwenden. Dies entspricht der zugehörigen Funktion von PostgreSQL 14. - Die maximale Länge von Passwörtern und Benutzernamen wurde auf 996 bzw. 128 erhöht. Verschiedene Cloud-Dienste erfordern dies.
- Die Mindestgröße des Pools kann jetzt pro Datenbank festgelegt werden, ebenso wie die reguläre Poolgröße und die Größe des Reservepools.
- Die Anzahl ausstehender Abbruchanfragen für Abfragen wird in
SHOW POOLSangezeigt.
-
Fehlerbehebungen
- Beim Parsen der Konfiguration werden Fehler jetzt an vielen Stellen strenger behandelt. Wo früher möglicherweise ein Fehler protokolliert und die Verarbeitung fortgesetzt wurde, führen solche Konfigurationsfehler jetzt zu einem fehlgeschlagenen Start. So hätte es schon immer sein sollen, doch einige Codestellen setzten dies nicht korrekt um. Manche Benutzer könnten feststellen, dass ihre Konfigurationen schon immer fehlerhaft waren und nun nicht mehr funktionieren.
- Die Verarbeitung von Abbruchanfragen für Abfragen korrigiert. Unter bestimmten Umständen schienen Abbruchanfragen lange festzuhängen. Dies sollte nicht mehr vorkommen. Tatsächlich können Abbruchanfragen jetzt bis zum Doppelten der Poolgröße reichen, sodass sie wirklich nicht mehr festhängen sollten. (#542 , #543 )
- Die gemischte Verwendung von md5 und scram über hba korrigiert.
- Den Build mit c-ares unter Windows korrigiert.
- Die gefürchteten Meldungen “FIXME: query end, but query_start == 0” beseitigt. Ihre Ursache ist jetzt bekannt; sie sollten nicht mehr auftreten. (#565 )
- Das Neuladen von
default_pool_size,min_pool_sizeundreserve_pool_sizekorrigiert. Bisher funktionierte das Neuladen dieser Einstellungen nicht.
-
Bereinigungen
- Cirrus CI wird jetzt statt Travis CI verwendet .
- Wie üblich wurden viele Tests hinzugefügt.
- Die Protokollmeldung “unclean server” etwas präzisiert. Sie lautet jetzt “client disconnect while server was not ready” oder “client disconnect before everything was sent to the server”. Erstere kann auftreten, wenn die Clientverbindung geschlossen wird, während auf dem Server ein Transaktionsblock offen ist. Dies hatte einige Benutzer verwirrt.
- “pgbouncer” kann nicht mehr als Datenbankname verwendet werden. Dieser Name ist für die Verwaltungskonsole reserviert; seine Verwendung als regulärer Datenbankname hatte nie wirklich korrekt funktioniert. Sie ist jetzt ausdrücklich untersagt.
- Fehler, die vor dem Schließen der Verbindung an Clients gesendet werden, werden jetzt als FATAL statt nur als ERROR gekennzeichnet. Einige Clients reagierten andernfalls verwirrt. (#564 )
- Compilerwarnungen mit GCC 11 beseitigt. (#623 )
PgBouncer 1.15.x
2020-11-19 - PgBouncer 1.15.0 - „Ich hab noch einen Koffer in Berlin“
-
Funktionen
- Die Meldung von Authentifizierungsfehlern verbessert. Die an Clients gesendeten Fehlermeldungen besagen jetzt nur noch, dass die Authentifizierung fehlgeschlagen ist, ohne weitere Einzelheiten. Details stehen im PgBouncer-Protokoll. Auch wenn der angeforderte Benutzer nicht existiert, wird die Authentifizierung vollständig durchgeführt und endet mit derselben allgemeinen Fehlermeldung. All dies verhindert, dass Clients die PgBouncer-Instanz nach Benutzernamen und anderen Informationen zur Authentifizierung auskundschaften. Das Verhalten ähnelt dem von PostgreSQL.
- Nichts protokollieren, wenn ein Client die Verbindung sofort wieder trennt. Dies vermeidet unnötige Protokolleinträge, wenn Überwachungssysteme lediglich eine TCP/IP-Verbindung öffnen und ohne Senden von Daten wieder trennen.
- Das systemd-Journal zur Protokollierung verwenden, wenn es im Einsatz ist. Wird erkannt, dass stderr ins systemd-Journal geleitet wird, werden die nativen systemd-Funktionen zur Protokollausgabe verwendet. Dies vermeidet doppelte Zeitstempel und Prozess-IDs und macht das Protokoll übersichtlicher. Außerdem werden Metadaten wie der Schweregrad ergänzt, sodass die Meldungen nützliche Metadaten enthalten, wenn das Journal an syslog weitergeleitet wird.
- Ein Teil der Testsuite kann jetzt unter Windows ausgeführt werden.
SHOW CONFIGzeigt jetzt auch die Standardwerte der Einstellungen an.
-
Fehlerbehebungen
- Die Option
so_reuseportunter FreeBSD korrigiert. Der ursprüngliche Code in PgBouncer 1.12.0 funktionierte unter FreeBSD tatsächlich nicht. (#504 ) - Die Kompilierung auf Systemen mit älteren systemd-Versionen repariert. Sie war in 1.14.0 beschädigt worden. (#505 )
- Das Makefile-Ziel zum Erstellen von ZIP-Paketen mit Windows-Binärdateien repariert.
- Lange Befehlszeilenoptionen funktionieren jetzt auch unter Windows.
- Das Verhalten der globalen Einstellung
auth_userkorrigiert. Das alte Verhalten war verwirrend und fehleranfällig, weil es von der Reihenfolge in der Konfigurationsdatei abhing. Dies ist nicht mehr der Fall. (#391 , #393 )
- Die Option
-
Bereinigungen
- Stabilität und Portierbarkeit der Tests verbessert.
- Den Autoconf-bezogenen Code modernisiert.
- Compilerwarnungen zu veralteten Funktionen von OpenSSL 3.0.0 deaktiviert.
PgBouncer 1.14.x
2020-06-11 - PgBouncer 1.14.0 - „Die wiedergefundene Magie“
-
Funktionen
- SCRAM-Authentifizierungsdurchleitung hinzugefügt. Damit lassen sich verschlüsselte
SCRAM-Secrets in PgBouncer (aus
userlist.txtoderauth_query) für die Anmeldung bei Servern verwenden. - Unterstützung für systemd-Socket-Aktivierung hinzugefügt. Dies ist besonders nützlich,
um systemd auf Systemen mit eingeschränktem Zugriff auf
/var/run/postgresqldie Erstellung der Unix-Domain-Sockets zu überlassen. - Unterstützung für Unix-Domain-Sockets unter Windows hinzugefügt.
- SCRAM-Authentifizierungsdurchleitung hinzugefügt. Damit lassen sich verschlüsselte
SCRAM-Secrets in PgBouncer (aus
-
Bereinigungen
- Eine alternative, kleinere Beispielkonfiguration
pgbouncer-minimal.inifür Tests oder den Einsatz hinzugefügt.
- Eine alternative, kleinere Beispielkonfiguration
PgBouncer 1.13.x
2020-04-27 - PgBouncer 1.13.0 - „Mein Lieblingsspiel“
-
Funktionen
- Die Konfigurationseinstellung
tcp_user_timeoutzum Setzen der entsprechenden Socket-Option hinzugefügt. client_tls_protocolsundserver_tls_protocolshaben jetzt den Standardwertsecure. Damit sind nur TLS 1.2 und TLS 1.3 aktiviert. Ältere Versionen werden weiterhin unterstützt, sind lediglich nicht standardmäßig eingeschaltet.- Unterstützung für systemd-Dienstbenachrichtigungen hinzugefügt. Damit lassen sich
derzeit Service-Units mit
Type=notifyverwenden. Eine weitergehende Integration ist für zukünftige Versionen geplant.
- Die Konfigurationseinstellung
-
Fehlerbehebungen
- Mehrzeilige Protokollmeldungen korrigiert (libusual #24 )
- Von
auth_queryzurückgegebene Nullwerte für Benutzernamen korrekt behandeln (#340 )
-
Bereinigungen
- Die Dateien zur Debian-Paketerstellung unter
debianentfernt. Es wird empfohlen, die Pakete von https://apt.postgresql.org/ zu verwenden. - Zahlreiche Korrekturen und Verbesserungen in der Testsuite
- Die Tests versuchen standardmäßig nicht mehr, sudo zu verwenden. Dies kann
jetzt durch Setzen der Umgebungsvariable
USE_SUDOexplizit aktiviert werden. - Die Nutzung der libevent-API wurde auf Schnittstellen im Stil von Version 2 umgestellt; die veralteten Schnittstellen von Version 1 werden nicht mehr verwendet.
- Die Dateien zur Debian-Paketerstellung unter
PgBouncer 1.12.x
2019-10-17 - PgBouncer 1.12.0 - „Es geht ums Lernen und Besserwerden“
Diese Version enthält zahlreiche kleinere Erweiterungen und Fehlerbehebungen.
-
Funktionen
- Eine Einstellung zum Aktivieren der Socket-Option
SO_REUSEPORThinzugefügt. Auf manchen Betriebssystemen ermöglicht dies, mehrere PgBouncer-Instanzen auf demselben Host am selben Port lauschen zu lassen, wobei der Kernel die Verbindungen automatisch verteilt. - Eine Einstellung für die Verwendung einer vom Betriebssystem getrennten
resolv.conf-Datei hinzugefügt. Damit lassen sich eigene DNS-Server und gegebenenfalls weitere DNS-Optionen festlegen. - Die Ausgabe von
SHOW VERSIONwird als normale Ergebniszeile statt als NOTICE-Nachricht gesendet. Das erleichtert die Verarbeitung und entspricht dem Verhalten andererSHOW-Befehle.
- Eine Einstellung zum Aktivieren der Socket-Option
-
Fehlerbehebungen
- Statistikspalten werden als
numericstatt alsbigintgesendet. Dies verhindert Fehler in einigen Clientbibliotheken bei Werten, die den Wertebereich vonbigintüberschreiten. (#360 , #401 ) - Ein Problem behoben, bei dem PAM-Benutzer ihr Passwort verloren. (#285 )
- Clients mit aktiviertem SCRAM Channel Binding werden akzeptiert. Bisher schlug die Verbindung mit PgBouncer in bestimmten Situationen fehl, wenn der Client Channel Binding unterstützte (also PostgreSQL 11+). PgBouncer unterstützt Channel Binding nicht. Diese Änderung korrigiert lediglich die Unterstützung für Clients, die es anbieten.
- Die Kompilierung mit neueren Versionen von musl-libc (verwendet von Alpine Linux) korrigiert.
- Statistikspalten werden als
-
Bereinigungen
- Das Ziel
make checkhinzugefügt. Damit lassen sich alle Tests mit einem einzigen Befehl ausführen. - Verweise auf das PostgreSQL-Wiki entfernt. Alle Informationen stehen jetzt entweder in der PgBouncer-Dokumentation oder auf der Website.
- Die Unterstützung für Libevent 1.x entfernt. Libevent 2.x ist jetzt erforderlich. Libevent wird jetzt über pkg-config erkannt.
- Compilerwarnungen unter macOS und Windows beseitigt. Der Build auf diesen Plattformen sollte jetzt ohne Warnungen erfolgen.
- Einige Warnungen von LLVM scan-build beseitigt.
- Das Ziel
PgBouncer 1.11.x
2019-08-27 - PgBouncer 1.11.0 - „Instinkt für Großes“
- Funktionen
- Unterstützung für SCRAM-Authentifizierung für Clients und Server hinzugefügt.
Der neue Authentifizierungstyp
scram-sha-256wurde ergänzt. auth_type=passwordwird bei einem gespeicherten md5-Passwort so behandelt, wie es ein PostgreSQL-Server tun würde. (#129 )- Die Option
log_statshinzugefügt, um die Ausgabe von Statistiken ins Protokoll zu deaktivieren. (#287 ) - Die Zeitzone zu Protokollzeitstempeln hinzugefügt.
- Die PID im Protokollpräfix in [eckige Klammern] setzen.
- Unterstützung für SCRAM-Authentifizierung für Clients und Server hinzugefügt.
Der neue Authentifizierungstyp
- Fehlerbehebungen
- Den OpenSSL-Test in configure bei neueren OpenSSL-Versionen mit
-Werrorkorrigiert. - Die Berechnung der Wartezeit mit
auth_userkorrigiert. Sie führte entweder zu einem Absturz oder meldete unsinnige Werte für die Wartezeit. (#393 ) - Das in PostgreSQL 12 hinzugefügte Paket GSSENCRequest verarbeiten. Es bewirkt derzeit nichts, verhindert aber verwirrende Fehlermeldungen zu “bad packet header”.
- Den OpenSSL-Test in configure bei neueren OpenSSL-Versionen mit
- Bereinigungen
- Viele Verbesserungen in der Testsuite und mehrere neue Tests
- Mehrere Compilerwarnungen unter Windows beseitigt.
- Die Dokumentation des Abschnitts
[users]erweitert und diesen zur Beispielkonfiguration hinzugefügt. (#330 )
PgBouncer 1.10.x
2019-07-01 - PgBouncer 1.10.0 - „Angst vor der Welt“
- Funktionen
- Unterstützung für das Aktivieren und Deaktivieren von TLS 1.3 hinzugefügt. TLS 1.3 wurde abhängig von der OpenSSL-Bibliothek bereits unterstützt, wird jetzt aber auch von den Konfigurationseinstellungen zur Auswahl der TLS-Protokollversionen unterstützt.
- Fehlerbehebungen
- Die Unterstützung für TLS 1.3 korrigiert. Sie funktionierte mit OpenSSL 1.1.1 und 1.1.1a nicht, wohl aber mit früheren und späteren Versionen.
- Einen seltenen Absturz in
SHOW FDSbehoben (#311 ). - Ein Problem behoben, das bei vielen eintreffenden Abbruchanfragen zu einem längeren Ausfall führen konnte (#329 ).
- “unexpected response from login query” nach dem Neuladen von Postgres vermieden (#220 ).
- Die Berechnung von
idle_transaction_timeoutkorrigiert (#125 ). Der Fehler führte in bestimmten Situationen zu vorzeitigen Zeitüberschreitungen.
- Bereinigungen
- Verschiedene Protokoll- und Fehlermeldungen präzisiert.
- Von Coverity erkannte Probleme behoben; keines hatte in der Praxis erhebliche Auswirkungen.
- Alle Testskripte verbessert und dokumentiert.
- Weitere SHOW-Befehle zur Dokumentation hinzugefügt.
- Die Dokumentation von rst auf Markdown umgestellt.
- Alle Python-Skripte im Quellbaum sind jetzt mit Python 3 kompatibel.
PgBouncer 1.9.x
2018-08-13 - PgBouncer 1.9.0 - „Überleben im Chaos“
- Funktionen
- Befehl RECONNECT
- Befehl WAIT_CLOSE
- Schnelles Schließen: Ein Server im Sitzungs-Pooling-Modus wird sofort getrennt, wenn er sich im Modus “close_needed” (erneuter Verbindungsaufbau) befindet.
- Die Spalte close_needed zu SHOW SERVERS hinzugefügt
- Fehlerbehebungen
- Doppelte Speicherfreigabe in parse_filename vermieden
- Dereferenzierung eines NULL-Zeigers in parse_line vermieden
- Bereinigungen
- mkauth.py auf Python 3 portiert
- Die Dokumentation der Signale verbessert
- Die Dokumentation zum Schnelleinstieg verbessert
- Den Befehl SET dokumentiert
- Die Liste benötigter Software korrigiert
- Warnungen zu -Wimplicit-fallthrough beseitigt
- Fehlende Dokumentation für verschiedene SHOW-Felder ergänzt
- Das Verhalten beim erneuten Verbindungsaufbau nach Neuladen und DNS-Änderungen dokumentiert
- Dokumentiert, dass auf KILL anschließend RESUME folgen muss
- Die Dokumentation von server_lifetime präzisiert
- Tippfehler und Groß-/Kleinschreibung in Meldungen und Dokumentation korrigiert
- Den psql-Aufruf in Tests korrigiert
- Verschiedene weitere Verbesserungen am Testaufbau
PgBouncer 1.8.x
2017-12-20 - PgBouncer 1.8.1 - „Beim Bodenkampf aufs Zuschlagen setzen“
- Fehlerbehebungen
- Die Datei
include/pam.hin den Distributions-Tarball aufgenommen. Ihr Fehlen hatte jeglichen Build aus dem Tarball von 1.8 verhindert.
- Die Datei
2017-12-19 - PgBouncer 1.8 - „Sicher am Steuer“
- Funktionen
- PAM-Authentifizierung unterstützt. (Mit
--with-pamaktivieren.) - Die Felder
pausedunddisabledzur Ausgabe vonSHOW DATABASEShinzugefügt. - Das Feld
maxwait_uszur Ausgabe vonSHOW POOLShinzugefügt. - Die Felder
waitundwait_uszur Ausgabe derSHOW-Befehle hinzugefügt. - Die neuen Befehle
SHOW STATS_TOTALSundSHOW STATS_AVERAGEShinzugefügt. - Abfragen und Transaktionen werden in
SHOW STATSgetrennt erfasst. Die Feldertotal_requests,avg_requndavg_querywurden durch neue Felder ersetzt. wait_timezuSHOW STATShinzugefügt.
- PAM-Authentifizierung unterstützt. (Mit
- Fehlerbehebungen
- Die aktualisierte libusual unterstützt OpenSSL 1.1.
- Es wird nicht versucht, TLS auf Unix-Sockets zu verwenden.
- Beim Parsen von
pg_hba.confwird nach fehlerhaften Zeilen weitergearbeitet, statt die gesamte Datei zurückzuweisen. (#118 ) - Mehrere weitere Korrekturen beim Parsen von hba.
- Eine Race Condition beim Abbrechen einer Abfrage behoben. (#141 )
- Bereinigungen
- Die Einstellung
auth_userist jetzt auch global zulässig, nicht nur pro Datenbank. (#142 ) - Die Client- und Serverkodierung der Konsole auf
UTF8setzen.
- Die Einstellung
PgBouncer 1.7.x
2016-02-26 - PgBouncer 1.7.2 - „Endlich abgehoben“
- Fehlerbehebungen
- Absturz beim Entfernen einer veralteten PID-Datei behoben. Das Problem wurde in 1.7.1 eingeführt.
- Speicherbereinigung deaktiviert: Sie verhindert die Übernahme und ist für produktive Lasten nicht sinnvoll. Das Problem wurde in 1.7.1 eingeführt.
- Nach der Übernahme warten, bis die PID-Datei entfernt wurde, bevor der Start fortgesetzt wird. Das durch die Speicherbereinigung verlangsamte Herunterfahren legte eine bestehende Race Condition offen. (#113 )
- Bereinigungen
2016-02-18 - PgBouncer 1.7.1 - „An fünf Freunde weiterleiten, sonst …“
WARNUNG: Seit Version 1.7 wird server_reset_query nicht ausgeführt, wenn sich
die Datenbank im Transaktions-Pooling-Modus befindet. Offenbar wurde dies in
der Ankündigung zu 1.7 nicht deutlich genug hervorgehoben. Falls Anwendungen
darauf angewiesen sind, mit server_reset_query_always das bisherige Verhalten wiederherstellen.
Die Arbeit an dieser Version bestand ansonsten hauptsächlich darin, ein vermeintliches TLS-Speicherleck aufzuspüren, das sich als nicht existent erwies. Stattdessen benötigt der libssl-Build in Debian/wheezy 600k zusätzlichen Speicher pro Verbindung (ohne Speicherleck) statt der erwarteten 20-30k. Darauf sollte bei der Verwendung von TLS geachtet werden.
- Fehlerbehebungen
- TLS: sslmode “disabled” in “disable” umbenannt, da PostgreSQL diese Bezeichnung verwendet.
- TLS:
client_tls_sslmode=verify-ca/-fullweist jetzt Verbindungen ohne Clientzertifikat ab. (#104 ) - TLS:
client_tls_sslmode=allow/requirevalidiert ein Clientzertifikat, wenn eines gesendet wird. Zuvor blieb die Zertifikatsvalidierung unkonfiguriert, sodass Verbindungen mit Clientzertifikat fehlschlugen. (#105 ) - Speicherleck beim Freigeben einer Datenbank behoben.
- Mögliches Speicherleck in tls_handshake() behoben.
- EOF-Behandlung in tls_handshake() korrigiert.
- Zu kleinen memset-Bereich in der Kompatibilitätsimplementierung von asn1_time_parse korrigiert.
- Build ohne TLS (
--without-openssl) korrigiert. (#101 ) - Verschiedene Probleme beim Windows-Build behoben. (#100 )
- Bereinigungen
- TLS: SSL_MODE_RELEASE_BUFFERS verwenden, um den Speicherverbrauch inaktiver Verbindungen zu verringern.
- Zugewiesenen Speicher beim Beenden freigeben. Dies erleichtert den Einsatz von Werkzeugen zur Suche nach Speicherlecks.
- Dokumentation zu
server_reset_queryverbessert. (#110 ) - TLS-Optionen zur Beispielkonfiguration hinzugefügt.
2015-12-18 - PgBouncer 1.7 - „Die Farben variieren nach der Auferstehung“
- Funktionen
- TLS-Verbindungen unterstützen. OpenSSL/LibreSSL dient als Backend-Implementierung.
- Authentifizierung über TLS-Clientzertifikate unterstützen.
- “peer”-Authentifizierung über Unix-Sockets unterstützen.
- Eine Datei für die hostbasierte Zugriffskontrolle unterstützen, wie pg_hba.conf in PostgreSQL. Damit lassen sich TLS für Netzwerkverbindungen und “peer”- Authentifizierung für lokale Verbindungen konfigurieren.
- Bereinigungen
query_wait_timeoutstandardmäßig auf 120s setzen. Der bisherige Standardwert (0) führt zu unbegrenztem Warten in der Warteschlange, was nicht sinnvoll ist. Das bedeutet: Hat ein Client eine ausstehende Abfrage und wurde ihm noch keine Serververbindung zugewiesen, wird die Clientverbindung getrennt.server_reset_query_alwaysstandardmäßig deaktivieren. Die Abfrage zum Zurücksetzen wird jetzt nur in Pools mit Sitzungs-Pooling verwendet.- pkt_buf auf 4096 Byte erhöhen. Dies verbessert die Leistung mit TLS. Das Verhalten hängt wahrscheinlich von der Last ab, die Änderung sollte jedoch unbedenklich sein, da die Paketpuffer seit v1.2 von den Verbindungen getrennt sind und erst bei Bedarf aus einem Pool bezogen werden.
- Pipelining durch Zählen der erwarteten ReadyForQuery-Pakete unterstützen. Dadurch wird verhindert, dass der Server zu früh freigegeben wird. Behebt #52 .
- sbuf_loopcnt-Logik verbessert: Der Socket wird garantiert erneut verarbeitet, auch wenn kein Socket-Ereignis vorliegt. Dies ist für TLS erforderlich, da es eigene Puffer verwendet.
- Systemtests für aktuelle BSD- und MacOS-Versionen angepasst. (Eric Radman)
- crypt-Authentifizierung entfernt. Sie ist veraltet und wird seit PostgreSQL 8.4 nicht mehr unterstützt.
- Die einfache configure-Option “–with-cares” korrigiert: Ohne Argument funktionierte sie nicht.
PgBouncer 1.6.x
2015-09-03 - PgBouncer 1.6.1 - „Das Studiopublikum stimmt zu“
-
Funktionen
-
Neue Einstellung:
server_reset_query_always. Wenn sie gesetzt ist, wirdserver_reset_queryfür Pools ohne Sitzungs-Pooling deaktiviert. PgBouncer führt pool_mode pro Pool ein, doch Sitzungs-Pooling und Transaktions-Pooling sollten nicht dieselbe Abfrage zum Zurücksetzen verwenden. Tatsächlich sollte Transaktions-Pooling überhaupt keine solche Abfrage verwenden.In 1.6.x ist die Einstellung aktiviert, in 1.7 wird sie jedoch deaktiviert.
-
-
Fehlerbehebungen
-
[SICHERHEIT] Ungültige Zuweisung von
auth_userentfernt. (#69) Wennauth_usergesetzt ist und der Client einen nicht vorhandenen Benutzernamen angibt, meldet sich der Client alsauth_useran. Das ist problematisch. -
NoticeResponse in handle_auth_response überspringen. Andernfalls führen ausführliche Protokollierungsstufen auf dem Server zu Anmeldefehlern.
-
Konsole:
auth_userbelegen, wenn auth_type=any gesetzt ist. Andernfalls kann die Protokollierung abstürzen (#67). -
Verschiedene Portabilitätskorrekturen (OpenBSD, Solaris, OSX).
-
2015-08-01 - PgBouncer 1.6 - „Zombies der Zukunft“
-
Funktionen
-
Den Passwort-Hash des Benutzers aus einer PostgreSQL-Datenbank laden. Neue Parameter:
auth_user Benutzer, mit dem die Verbindung zur selben Datenbank hergestellt und die Benutzerinformation abgefragt wird. Kann auch pro Datenbank gesetzt werden.
auth_query SQL-Abfrage, die als auth_user ausgeführt wird. Standardwert: “SELECT usename, passwd FROM pg_shadow WHERE usename=$1”
(Cody Cutrer)
-
Der Pooling-Modus lässt sich sowohl pro Datenbank als auch pro Benutzer konfigurieren. (Cody Cutrer)
-
Verbindungsgrenzen pro Datenbank und pro Benutzer: max_db_connections und max_user_connections. (Cody Cutrer / Pavel Stehule)
-
DISABLE/ENABLE-Befehle hinzugefügt, um neue Verbindungen zu verhindern. (William Grant)
-
Neues DNS-Backend: c-ares. Es ist das einzige DNS-Backend, das alle relevanten Funktionen unterstützt: /etc/hosts mit Aktualisierung, SOA-Abfragen, große Antworten (über TCP/EDNS+UDP), IPv6. Es ist jetzt das bevorzugte Backend und wird künftig wahrscheinlich das einzige Backend sein, da die Unterstützung einer Vielzahl unzureichender Bibliotheken nicht sinnvoll ist.
Problem: c-ares-Versionen <= 1.10 enthalten einen Fehler, durch den die CNAME-Unterstützung bei aktiviertem IPv6 nicht funktioniert. (Im Upstream behoben.) Als Übergangslösung wird c-ares <= 1.10 nur mit IPv4 verwendet. PgBouncer wird die anderen Backends daher erst entfernen, wenn c-ares >1.10 (noch nicht veröffentlicht) einige Zeit verfügbar ist …
-
remote_pid in SHOW CLIENTS/SERVERS anzeigen. Verfügbar für Clients mit Verbindungen über Unix-Sockets sowie für Serververbindungen über TCP und Unix-Sockets. Bei TCP-Servern wird die PID aus dem Abbruchschlüssel entnommen.
-
Eigenen Konfigurationsparameter (dns_nxdomain_ttl) zur Steuerung der negativen DNS-Zwischenspeicherung hinzugefügt. (Cody Cutrer)
-
IP-Adresse und Port des Clienthosts zu application_name hinzufügen. Dies wird durch den Konfigurationsparameter application_name_add_host aktiviert, dessen Standardwert ‘off’ ist. (Andrew Dunstan)
-
Konfigurationsdateien unterstützen die Direktive ‘%include FILENAME’, mit der sich die Konfiguration auf mehrere Dateien aufteilen lässt. (Andrew Dunstan)
-
-
Bereinigungen
- Protokoll: IPv6-Adressen in [] einschließen.
- Protokoll: Beim Verbindungsaufbau zum Server lokale IP-Adresse und Port anzeigen.
- win32: Für lange Argumente den GNU-Stil verwenden: –foo
- Ziffern in Hostnamen zulassen; immer versuchen, mit inet_pton zu parsen.
- deallocate_all() in den FAQ korrigiert.
- Falsches Schlüsselwort in der Beispielkonfiguration korrigiert. (Magnus Hagander)
- Kommentare (mit ‘;’) in Authentifizierungsdateien zulassen. (Guillaume Aubert)
- Rechtschreibfehler in Protokollmeldungen und Kommentaren korrigiert. (Dmitriy Olshevskiy)
-
Fehlerbehebungen
- Aufbau neuer Verbindungen während der Wartung korrigiert. (Cody Cutrer)
- Authentifizierungsdatei beim Start nicht zweimal laden. (Cody Cutrer)
- Korrekte Invalidierung automatisch erzeugter Datenbanken.
- IPv6: IPV6_V6ONLY am lauschenden Socket setzen.
- win32: SO_REUSEADDR am lauschenden Socket nicht setzen.
- memcpy für IPv6-Adressen korrigiert.
- Abbruch wartender Clients korrigiert. (Mathieu Fenniak)
- Kleinen Fehler behoben: Das Ergebnis von calloc muss geprüft werden. (Heikki Linnakangas)
- Zeilenumbruch am Ende der PID-Datei hinzugefügt. (Peter Eisentraut)
- Keine neuen Serververbindungen zulassen, wenn PAUSE
ausgeführt wurde. (Petr Jelinek) - ‘bad packet’ bei der Anmeldung behoben, wenn der Header verzögert eintrifft. (Michał Trojnara, Marko Kreen)
- Von Coverity erkannte Fehler behoben. (Euler Taveira)
- server_idle_timeout deaktivieren, wenn die Serveranzahl unter min_pool fällt (#60). (Marko Kreen)
PgBouncer 1.5.x
2015-04-09 - PgBouncer 1.5.5 - „Totstellen, um zu gewinnen“
- Fehlerbehebungen
- Aus der Ferne auslösbaren Absturz behoben: Eine ungültige Paketreihenfolge führt zum Zugriff auf einen NULL-Zeiger. Nicht ausnutzbar, nur DoS.
2012-11-28 - PgBouncer 1.5.4 - „Keine Lecks, Töpfchentraining erfolgreich“
- Fehlerbehebungen
- DNS: Speicherleck im getaddrinfo_a()-Backend behoben.
- DNS: Speicherleck im udns-Backend behoben.
- DNS: Statistikberechnung korrigiert.
- DNS: Verarbeitung von Fehlermeldungen für getaddrinfo_a() verbessert.
- win32-Kompilierung korrigiert.
- Prüfung der Compiler-Unterstützung für Abhängigkeiten in configure korrigiert.
- Einige Dokumentationsfehler korrigiert.
2012-09-12 - PgBouncer 1.5.3 - „Quantentoaster“
-
Kritische Fehlerbehebung
-
Zu lange Datenbanknamen können zu einem Absturz führen, der sich bei aktivierten automatisch erzeugten Datenbanken aus der Ferne auslösen lässt.
Die ursprünglichen Prüfungen gingen davon aus, dass alle Namen aus Konfigurationsdateien stammen; daher war die Verwendung von fatal() unproblematisch. Sind automatisch erzeugte Datenbanken jedoch aktiviert
- durch ‘*’ im Abschnitt [databases] -, kann der Datenbankname aus dem Netzwerk stammen, was ein Beenden aus der Ferne ermöglicht.
-
-
Kleinere Funktionen
- max_packet_size: Konfigurationsparameter zur Einstellung der maximalen Paketgröße, die weitergeleitet werden darf. Der Standardwert bleibt unverändert: (2G-1), kann jetzt jedoch verkleinert werden.
- Wenn sich ein Paketheader nicht parsen lässt, diesen im Protokoll und in der Fehlermeldung hexadezimal anzeigen.
-
Fehlerbehebungen
- AntiMake verwendete $(relpath) und $(abspath) zur Bearbeitung von Pfadnamen. Dadurch schlug der Build jedoch fehl, wenn der Pfad des Quellbaums symbolische Links enthielt. Der Code arbeitet jetzt ausschließlich mit einfachen Zeichenketten.
- Konsole: Mit SET können jetzt leere Zeichenketten als Werte gesetzt werden.
- config.txt: Darauf hinweisen, dass alle Zeitüberschreitungen als Gleitkommazahlen angegeben werden können. Diese wenig bekannte Funktion wurde in 1.4 eingeführt.
2012-05-29 - PgBouncer 1.5.2 - „Nicht kauen, nur schlucken“
- Fehlerbehebungen
- Durch einen Fehler wurde reserve_pool_timeout in Mikrosekunden statt Sekunden interpretiert. Dadurch wurde der Reservepool praktisch sofort aktiviert, sobald der Pool voll war. Jetzt wird der Wert wie vorgesehen als Sekunden interpretiert. (Von Keyur Govande bemerkt)
2012-04-17 - PgBouncer 1.5.1 - „Abbrechen, wiederholen, ignorieren?“
- Funktionen
- Parameter zur Einstellung der Berechtigungen für den Unix-Socket: unix_socket_mode=0777, unix_socket_group=’’.
- Fehlerbehebungen
- Leere Zeichenketten als serverseitige Variablenwerte zulassen. Dies ist erforderlich, damit “application_name” korrekt funktioniert, da es der einzige Parameter ohne serverseitigen Standardwert ist.
- Bei geänderter Verbindungszeichenfolge die Aktualisierung der Serverparameter erzwingen. Zuvor verwendete PgBouncer die alten Parameter weiter, was bei einem PostgreSQL-Upgrade zu Problemen führt.
- Bei geänderter Verbindungszeichenfolge einer automatisch erzeugten Datenbank alte Verbindungen trennen.
- cf_setint: strtol() statt atoi() zum Parsen ganzzahliger Konfigurationsparameter verwenden. Damit sind hexadezimale und oktale Werte sowie eine bessere Fehlererkennung möglich.
- sigqueue() verwenden, um das Vorhandensein von union sigval zu erkennen. Dies korrigiert die Kompilierung unter HPUX.
- Den Befehl ‘git’ aus dem Makefile entfernen, da er bei Builds aus einem einfachen Tarball zufällige Fehler verursacht.
- Parameter stats_period dokumentieren. Er steuert das Intervall für die Statistikausgabe.
- Asciidoc >= 8.4 voraussetzen; die Dokumentation scheint nicht mehr mit früheren Versionen kompatibel zu sein.
- Bei EINTR von close() keinen erneuten Versuch mehr unternehmen.
2012-01-05 - PgBouncer 1.5 - „Seit 2007 zufriedene Clients durchschleusen“
Wenn hinter einem DNS-Namen mehr als 8 IP-Adressen verwendet werden, muss die Abfrage jetzt über das EDNS0-Protokoll erfolgen. Nur die Backends getaddrinfo_a()/getaddrinfo() und UDNS unterstützen es, libevent 1.x/2.x nicht. Zur Aktivierung für libc ‘options edns0’ zu /etc/resolv.conf hinzufügen.
Zum Kompilieren wird GNU Make 3.81+ benötigt.
- Funktionen
- Änderungen an DNS-Antworten erkennen und Verbindungen zu IP-Adressen invalidieren, die in der neuesten Antwort nicht mehr enthalten sind. (Petr Jelinek)
- Hostnamen anhand der Seriennummer der DNS-Zone invalidieren. Wenn dns_zone_check_period gesetzt ist, werden die SOA-Einträge aller DNS-Zonen abgefragt. Hat sich die Seriennummer geändert, werden alle Hostnamen abgefragt. Dies ist für eine deterministische Invalidierung von Verbindungen erforderlich, da eine Invalidierung bei der Namensauflösung nutzlos ist, wenn keine Namensauflösung stattfindet. Funktioniert nur mit dem neuen UDNS-Backend.
- Neue Befehle SHOW DNS_HOSTS und SHOW DNS_ZONES zum Untersuchen des DNS-Caches.
- Neuer Parameter: min_pool_size verhindert, dass bei fehlender Last alle Verbindungen getrennt werden. (Filip Rembiałkowski)
- idle_in_transaction_timeout: Transaktion beenden, wenn sie zu lange im Leerlauf ist. Standardmäßig nicht gesetzt.
- Neues libudns-Backend für DNS-Abfragen. Bietet mehr Funktionen als evdns. Mit –with-udns aktivieren. Unterstützt IPv6 noch nicht.
- KILL-Befehl zum sofortigen Trennen aller Verbindungen einer Datenbank. (Michael Tharp)
- Wechsel zum Antimake-Build-System für übersichtlichere Makefiles. Zum Kompilieren wird jetzt GNU Make 3.81+ benötigt.
- Fehlerbehebungen
- DNS funktioniert jetzt mit IPv6-Hostnamen.
- Verbindungszustand nicht ändern, wenn NOTIFY vom Server eintrifft.
- Verschiedene Dokumentationsfehler korrigiert. (Dan McGee)
- Konsole: Bezeichner in "" einschließen können. Ursprünglich gab es keine Befehle mit Datenbanknamen als Argument, sodass kein Quoting benötigt wurde.
- Konsole: Im regulären Ausdruck für Wörter auch Ziffern am Wortanfang zulassen. Ein strikter Parser würde die Verarbeitung hier zu komplex machen.
- Pausierte automatisch erzeugte Datenbanken nicht verfallen lassen. (Michael Tharp)
- Automatisch erzeugte Datenbanken bei PAUSE nach Bedarf anlegen. (Michael Tharp)
- Falsche Protokollmeldung des Befehls RESUME korrigiert. (Peter Eisentraut)
- Enthält die Datenbank-Verbindungszeichenfolge user= ohne password=, wird das Passwort aus userlist übernommen.
- ‘*’ im Übernahmecode korrekt parsen.
- autogen.sh: Mit älteren autoconf-/automake-Versionen funktionieren.
- Absturz beim Betrieb als Dienst unter win32 behoben, der durch ein fehlerhaftes basename() der mingw/msvc-Laufzeit verursacht wurde. Jetzt wird immer die Kompatibilitätsimplementierung von basename() verwendet.
PgBouncer 1.4.x
2011-06-16 - PgBouncer 1.4.2 - „Algorithmus für den Erstschlag“
Betroffene Betriebssysteme: *BSD, Solaris, Win32.
- Portabilitätskorrekturen
- CFLAGS an den Linker übergeben. Dies ist bei der pthread-basierten Ersatzimplementierung von getaddrinfo_a() erforderlich.
- lib/find_modules.sh: split() durch index()+substr() ersetzen. Dadurch sollte es mit älteren AWKs funktionieren.
- <usual/endian.h>: htoX/Xtoh-Definitionen des Systems ignorieren. Möglicherweise ist nur ein Teil der Makros definiert.
- <usual/signal.h>: Kompatibilitätsimplementierungen von sigval und sigevent trennen.
- <usual/socket.h>: <sys/uio.h> einbinden, um iovec zu erhalten.
- <usual/time.h>: Automatische Funktionserkennung unter win32 verbessern.
- <usual/base_win32.h>: Doppelte Deklaration von sigval/sigevent entfernen.
2011-04-01 - PgBouncer 1.4.1 - „Alles war nur gespielt“
-
Funktionen
- Lauschen und Verbindungsaufbau auf IPv6-Adressen unterstützen. (Hannu Krosing)
- Mehrere Listen-Adressen in ’listen_addr’. Für jede wird getaddrinfo() aufgerufen, sodass auch Namen verwendet werden können.
- Konsole: PgBouncer-Version als ‘server_version’ an den Client senden.
-
Wichtige Fehlerbehebungen
-
getaddrinfo_a() unter glibc < 2.9 deaktivieren, da es mit älteren Versionen abstürzt.
Insbesondere betroffene Betriebssysteme: RHEL/CentOS 5.x (glibc 2.5), Ubuntu 8.04 (glibc 2.7). Ebenfalls betroffen ist Debian/lenny (glibc 2.7), dessen getaddrinfo_a() zwar nicht abstürzt, für das es aber keine zuverlässige Erkennungsmöglichkeit gibt.
Auf solchen Betriebssystemen bitte libevent 2.x verwenden; die Ersatzimplementierung von getaddrinfo_a() ist nicht für Produktionssysteme vorgesehen. Im neuen Abschnitt zur Unterstützung für DNS-Abfragen in README wird erläutert, wie das DNS-Backend ausgewählt wird.
(Hubert Depesz Lubaczewski, Dominique Hermsdorff, David Sommerseth)
-
Bei Verwendung von libevent 2.x standardmäßig –enable-evdns aktivieren.
-
tcp_keepalive standardmäßig aktivieren, wie es auch PostgreSQL tut. (Hubert Depesz Lubaczewski)
-
server_reset_query standardmäßig auf DISCARD ALL setzen, um von Anfang an mit PostgreSQL kompatibel zu sein.
-
win32: Abstürze bei Unix-Socket-Adressen mit NULL behoben. (Hiroshi Saito)
-
Bereinigung automatisch erzeugter Datenbanken korrigiert: Der alte Code verwechselte Datenbanken und Pools. Sobald ein leerer Pool gefunden wurde, wurde die Datenbank als ‘idle’ markiert. Dadurch konnte später eine Datenbank mit aktiven Benutzern beendet werden.
Gemeldet von: Hubert Depesz Lubaczewski
-
-
Fehlerbehebungen
- Kompatibilitätsimplementierung von getaddrinfo_a() durch einen einzelnen parallelen Thread für Namensabfragen nicht blockierend gemacht.
- Kompilierung mit pthread aktivieren, wenn die Kompatibilitätsimplementierung von getaddrinfo_a verwendet wird.
- release_server setzte bei einer Trennung aufgrund der Lebensdauer ->last_lifetime_disconnect nicht. (Emmanuel Courreges)
- win32: Authentifizierungsdateien mit DOS-Zeilenenden korrigiert. load_file() berücksichtigte nicht, dass die Datei beim Laden schrumpft. (Rich Schaaf)
- <usual/endian.h>: autoconf-Erkennung für enc/dec-Funktionen hinzufügen, um Konflikte unter BSD zu vermeiden. (James Pye)
- Nicht abstürzen, wenn die Konfigurationsdatei nicht vorhanden ist. (Lou Picciano)
- Bei fehlgeschlagener DNS-Abfrage mit sehr ausführlicher Protokollierung (-v -v) nicht abstürzen. (Hubert Depesz Lubaczewski, Dominique Hermsdorff)
- In find_modules.sh Backticks statt $(cmd) verwenden, um die Portabilität zu verbessern. (Lou Picciano)
- In find_modules.sh ‘awk’ statt ‘sed’ verwenden, um die Portabilität zu verbessern. (Giorgio Valoti)
- Informationen zum aktiven asynchronen DNS-Backend beim Start protokollieren.
- –disable-evdns korrigiert, sodass es ’no’ statt ‘yes’ bedeutet.
- In der Dokumentation erwähnen, dass -R unix_socket_dir voraussetzt.
- server_reset_query in faq.txt erläutern.
- Verloren gegangenen memset im Slab-Allokator wiederhergestellt.
- Verschiedene kleinere Portabilitätskorrekturen in libusual.
2011-01-11 - PgBouncer 1.4 - „Blutiger Code“
-
Funktionen
-
Asynchrone DNS-Abfragen: Hostnamen werden jetzt beim Verbindungsaufbau statt beim Neuladen aufgelöst; die Zwischenspeicherung ist konfigurierbar. (Siehe Parameter dns_max_ttl.)
Standardmäßig wird getaddrinfo_a() (glibc) als Backend verwendet. Ist es nicht vorhanden, wird getaddrinfo_a() durch blockierendes(!) getaddrinfo() emuliert.
Mit dem Argument –enable-evdns für configure wird evdns von libevent als Backend verwendet. Es ist nicht standardmäßig aktiviert, da libevent 1.3/1.4 eine fehlerhafte Implementierung enthält. Nur evdns in libevent 2.0 scheint in Ordnung zu sein.
-
Neue Konfigurationsvariable: syslog_ident zur Einstellung des syslog-Namens.
-
Korrekte Unterstützung des Startparameters
application_name. -
Lange Befehlszeilenoptionen (Guillaume Lelarge)
-
Portabilitätskorrekturen für Solaris (Hubert Depesz Lubaczewski)
-
Neue Konfigurationsvariable: disable_pqexec. Damit lässt sich in Umgebungen mit sehr hohen Sicherheitsanforderungen das Simple Query Protocol deaktivieren. Dies erfordert Anwendungen, die ausschließlich das Extended Query Protocol verwenden.
-
PostgreSQL-Kompatibilität: Ist der Datenbankname im Startpaket leer, den Benutzernamen als Datenbanknamen verwenden.
-
-
Fehlerbehebungen
- Bei den Serverparametern DateStyle und TimeZone muss die Groß-/Kleinschreibung exakt stimmen.
- Konsole: Serverparameter datetime, timezone und stdstr an den Client senden.
-
Interne Bereinigungen
- Bibliothek libusual für systemnahe Hilfsfunktionen verwenden.
- Feste Längenbegrenzung für Serverparameter entfernen.
PgBouncer 1.3.x
2010-09-09 - PgBouncer 1.3.4 - „Der Bouncer hat immer recht“
- Fehlerbehebungen
- Fail-Fast-Logik bereits beim Verbindungsaufbau anwenden. Bei einem Serverfehler erhalten Clients den Fehler somit schon beim Verbindungsaufbau.
- Automatisch erzeugte Datenbanken beim Neuladen nicht zur Prüfung markieren. Andernfalls werden sie beendet, da sie nicht in der Konfiguration stehen.
- Parameter application_name standardmäßig ignorieren. Dadurch müssen PostgreSQL-9.0-Benutzer ihn nicht selbst in ignore_startup_parameters= aufnehmen.
- Quoting in pg_auth korrigiert. ‘' wird dort nicht verwendet.
- Bessere Fehlerausgabe auf der Konsole; eingehende Abfrage dem Benutzer anzeigen.
- Betriebssysteme (OpenBSD) unterstützen, bei denen tv_sec nicht vom Typ time_t ist.
- Übermäßig viele Warnungen mit gcc 4.5 vermeiden.
2010-05-10 - PgBouncer 1.3.3 - „NSFW“
- Verbesserungen
- Argument von listen(2) mit listen_backlog konfigurierbar machen. Dies ist auf Betriebssystemen nützlich, bei denen das zulässige Systemmaximum konfigurierbar ist.
- Meldungen beim Trennen verbessern, damit sie den Benutzernamen oder Datenbanknamen nennen, der zum Fehlschlagen der Anmeldung geführt hat.
- Fehlerbehebungen
- Die Logik für erneute Verbindungsversuche im Fail-Fast-Verfahren umgestellt. Die bisherige Logik war bei dauerhaft fehlerhaften Datenbanken oder Benutzern störend, da sie selbst dann neue Versuche unternahm, wenn sich keine Clients anmelden wollten.
- Protokollierungsfunktionen behalten den bisherigen errno-Wert bei. Andernfalls kann sich PgBouncer bei höheren Protokollierungsstufen und Protokollierungsproblemen unerwartet verhalten.
- Verschiedene Puffer für den Verbindungsstart vergrößert, um die umfangreicheren Startmeldungen von EDB verarbeiten zu können.
- Startanfrage des V2-Protokolls erkennen und einen klaren Grund für die Trennung angeben.
2010-03-15 - PgBouncer 1.3.2 - „Bumerangkugel“
-
Fehlerbehebungen
-
Neue Konfigurationsvariable ‘query_wait_timeout’. Erhält der Client innerhalb dieser Anzahl von Sekunden keine Serververbindung, wird seine Verbindung getrennt.
-
Ist keine Serververbindung im Pool vorhanden und schlug der letzte Verbindungsversuch fehl, Clientverbindungen nicht warten lassen, sondern sofort einen Fehler senden.
Zusammen mit der vorherigen Korrektur verhindert dies unnötige Wartezeiten bei ausgefallenen Datenbanken.
-
libevent-Zustand in sbuf.c nachverfolgen, um doppelte event_del()-Aufrufe zu vermeiden. Obwohl dies normalerweise unbedenklich ist, scheint es nicht zu 100% zu funktionieren. Jetzt sollte jederzeit bekannt sein, ob der Aufruf bereits erfolgt ist.
-
Wartung während SUSPEND deaktivieren. Andernfalls könnte die alte PgBouncer-Instanz bei kurzen Zeitüberschreitungen nach der Übergabe noch einige Verbindungen schließen.
-
client_login_timeout auf Clients anwenden, die auf das Begrüßungspaket warten (erste Serververbindung). Andernfalls können sie unbegrenzt warten, sofern query_timeout nicht gesetzt ist.
-
win32: Schalter -U/-P zu -regservice hinzufügen, damit das Konto für die Ausführung des Dienstes gewählt werden kann. Die bisherige automatische Auswahl zwischen Local Service und Local System war nicht zuverlässig genug.
-
Konsole: \0 am Ende von Textspalten entfernen. Dies war schwer zu erkennen, da C-Clients damit zurechtkamen.
-
Dokumentation verbessert. (Greg Sabino Mullane)
-
Einige Protokollmeldungen zur Anmeldung präzisiert.
-
Protokollierungsstufe für vom Pooler gesendete Fehler (meist beim Trennen) von INFO auf WARNING ändern, da sie auf Probleme hinweisen.
-
Protokollmeldung für query_timeout in “query timeout” ändern.
-
2009-07-06 - PgBouncer 1.3.1 - „Jetzt vollständig konform mit den NSA-Überwachungsanforderungen“
- Fehlerbehebungen
- Problem mit sbuf_loopcnt behoben, das Verbindungen blockieren konnte. Lag die Länge einer Abfrage oder eines Ergebnisses nahe einem Vielfachen von (pktlen*sbuf_loopcnt) [standardmäßig 10k], konnte die Verbindung auf weitere Daten warten, die nicht mehr eintreffen würden.
- Datenbank-Neukonfiguration sofort wirksam machen. Bisher konnten alte Verbindungen nach SIGHUP wiederverwendet werden.
- SHOW DATABASES korrigiert, das durch das Hinzufügen einer Spalte nicht mehr funktionierte.
- Bei “auth_type=any” war der Konsolenzugriff deaktiviert, da PgBouncer den Benutzernamen verwarf. Korrektur: Bei “auth_type=any” jeden Benutzer als Administrator zur Konsole zulassen.
- Fehlerhaftes CUSTOM_ALIGN-Makro korrigiert. Glücklicherweise wird es nicht verwendet, wenn das Betriebssystem bereits ALIGN definiert; daher scheint der Fehler praktisch nicht aufgetreten zu sein.
- win32: WSAStartup() immer aufrufen, nicht nur im Daemon-Modus, da beim Parsen der Konfiguration Hostnamen aufgelöst werden sollen.
- win32: Den Namen der Konfigurationsdatei in der Befehlszeile des Dienstes in Anführungszeichen einschließen, um Leerzeichen in Pfaden zu ermöglichen. Der Pfad der ausführbaren Datei scheint dies aufgrund einer win32-Besonderheit nicht zu benötigen.
- STATS zur Ausgabe von SHOW HELP hinzufügen.
- doc/usage.txt: Die Zeiteinheiten in Konsolenergebnissen sind Mikrosekunden, nicht Millisekunden.
2009-02-18 - PgBouncer 1.3 - „Neue Abschlusstechnik Ki-Smash“
-
Funktionen
-
IANA hat Port 6432 als offiziellen Port für PgBouncer zugewiesen. Daher wurde die Standardportnummer auf 6432 geändert. Für bestehende Einzelanwender ist keine Änderung erforderlich. Bei der Verteilung von PgBouncer-Paketen bitte den Paketstandard auf den offiziellen Port ändern.
-
Dynamisches Anlegen von Datenbanken (David Galoyan)
Jetzt lässt sich eine Datenbank mit dem Namen “*” definieren. Ihre Verbindungszeichenfolge wird dann für alle nicht definierten Datenbanken verwendet. Dies ist hauptsächlich für Test- und Entwicklungsumgebungen nützlich.
-
Windows-Unterstützung (Hiroshi Saito)
PgBouncer läuft jetzt unter Windows 2000+. Der Aufruf über die Befehlszeile bleibt unverändert, allerdings sind weder der Daemon-Modus noch ein Online-Neustart möglich. Für den Betrieb als Dienst den Parameter service_name in der Konfiguration festlegen. Danach:
> pgbouncer.exe config.ini -regservice > net start SERVICE_NAMEZum Beenden und Aufheben der Registrierung:
> net stop SERVICE_NAME > pgbouncer.exe config.ini -unregserviceFür das Windows-Ereignisprotokoll muss zunächst die Ereignis-DLL registriert werden:
> regsvr32 pgbevent.dllAnschließend kann “syslog = 1” in der Konfiguration gesetzt werden.
-
-
Kleinere Funktionen
-
Datenbanknamen in der Konfigurationsdatei können jetzt mit dem üblichen SQL-Quoting für Bezeichner angegeben werden, um Sonderzeichen in Datenbanknamen zuzulassen.
-
Neue Einstellungen: ‘reserve_pool_size’ und ‘reserve_pool_timeout’. Wenn Clients im Pool länger als ‘reserve_pool_timeout’ Sekunden gewartet haben, legt ‘reserve_pool_size’ fest, wie viele Verbindungen zum Pool hinzugefügt werden können. Der Wert kann mit der Verbindungsvariable ‘reserve_pool’ auch pro Pool gesetzt werden.
-
Neue Einstellung ‘sbuf_loopcnt’, um die für einen Socket aufgewendete Zeit zu begrenzen.
Unter bestimmten Bedingungen, etwa auf einem SMP-Server mit lokalem PostgreSQL und schnellem Netzwerk, kann PgBouncer die recv()->send()-Schleife oft durchlaufen, ohne auf einer Seite zu blockieren. Dadurch warten jedoch andere Verbindungen lange. Für eine fairere Verarbeitung die Anzahl der recv()->send()-Durchläufe für einen Socket begrenzen. Wird die Grenze erreicht, mit der Verarbeitung anderer Sockets fortfahren. Die Verarbeitung dieses Sockets wird in der nächsten Ereignisschleife fortgesetzt.
Dank an Alexander Schöcke für den Bericht und die Tests.
-
crypt()-Authentifizierung ist jetzt optional, da sie aus PostgreSQL entfernt wurde. Falls das Betriebssystem sie nicht bereitstellt, funktioniert PgBouncer auch ohne sie.
-
Millisekunden zu Zeitstempeln im Protokoll hinzufügen.
-
Alte MD5-Implementierung durch eine kompaktere ersetzen.
-
ISC-Lizenz um die Klarstellung der FSF ergänzen.
-
-
Fehlerbehebungen
-
Meldet event_del() einen Fehler, die Bereinigung einfach fortsetzen. Zuvor versuchte PgBouncer den Aufruf erneut, falls ENOMEM die Ursache war. Dies führte jedoch zu endlos wiederholten Protokollmeldungen; offenbar kommt libevent damit nicht zurecht.
Weshalb event_del() beim ersten Aufruf einen Fehler meldet, ist weiterhin unklar.
-
–enable-debug legt jetzt lediglich fest, ob Debug-Informationen aus der Binärdatei entfernt werden. Die Option beeinflusst -fomit-frame-pointer nicht mehr, da dies gefährlich ist.
-
Reihenfolge der Include-Dateien korrigiert, da andernfalls System-Includes vor den internen eingebunden werden konnten. Dies war bei der neuen Datei md5.h ein Problem.
-
Datei COPYRIGHT in .tgz aufnehmen …
-
PgBouncer 1.2.x
2008-08-08 - PgBouncer 1.2.3 - „Sorgfältig ausgewählte Bytes“
- Fehlerbehebungen
- Nicht funktionierenden SO_ACCEPTFILTER-Code für BSDs deaktiviert.
- Beispieldatei etc/userlist.txt in tgz aufnehmen.
- Bei rekursiven Aufrufen ‘$(MAKE)’ statt ‘make’ verwenden. (Jørgen Austvik)
- _GNU_SOURCE definieren, da glibc sonst unbrauchbar ist.
- libevent 1.1 den Linktest bestehen lassen, damit später “1.3b+ needed” gemeldet werden kann.
- Veraltete PID-Datei erkennen und entfernen.
Dank an Devrim GÜNDÜZ und Bjoern Metzdorf für Problemberichte und Tests.
2008-08-06 - PgBouncer 1.2.2 - „Spuckbeutel inbegriffen“
- Fehlerbehebungen
- ‘drop_on_error’ entfernt; es war keine gute Idee. Die Einstellung wurde als Übergangslösung für das fehlerhafte Verhalten des Plancaches in PostgreSQL eingeführt, kann jedoch im üblichen Fall, dass bestimmte Abfragen immer einen Fehler zurückgeben, Schäden verursachen.
2008-08-04 - PgBouncer 1.2.1 - „Wasserdicht“
- Funktionen
- Neuer Parameter ‘drop_on_error’: Wenn der Server einen Fehler meldet, wird die Verbindung nicht wiederverwendet, sondern getrennt, sobald der Client sie nicht mehr benötigt. Dies ist zum Aktualisieren des Plancaches erforderlich. Die automatische Aktualisierung funktioniert auch in 8.3 nicht. Der Standardwert ist 1.
- Fehlerbehebungen
- SHOW SOCKETS/CLIENTS/SERVERS: Nicht abstürzen, wenn ein Socket keinen Puffer hat.
- Endlosschleife bei SUSPEND behoben, wenn suspend_timeout ausgelöst wird.
- Kleinere Bereinigungen
- <sys/uio.h> für ‘struct iovec’ verwenden.
- Herunterfahren (durch SIGINT) bei RESUME/SIGUSR2 abbrechen, da es sonst beim nächsten PAUSE ausgelöst würde.
- Korrekte Protokollmeldung, wenn ein Konsolenvorgang abgebrochen wird.
2008-07-29 - PgBouncer 1.2 - „Gewöhnliche Zauberflöte“
PgBouncer 1.2 benötigt jetzt libevent-Version 1.3b oder neuer. Ältere libevent-Versionen stürzen mit dem neuen Neustartcode ab.
-
Funktionen
-
Befehlszeilenoption (-u) und Konfigurationsparameter (user=) für den Benutzerwechsel beim Start. Außerdem verweigert PgBouncer jetzt die Ausführung als root.
(Jacob Coby)
-
Aussagekräftigere Hilfeausgabe (-h). (Jacob Coby)
-
Neue Datenbankoption: connect_query ermöglicht eine Abfrage auf neuen Verbindungen, bevor diese verwendet werden.
(Teodor Sigaev)
-
Neue Konfigurationsvariable ‘ignore_startup_parameters’, mit der zusätzliche Parameter im Startpaket zugelassen und ignoriert werden können. Standardmäßig sind nur ‘database’ und ‘user’ zulässig; alle anderen führen zu einem Fehler. Dies ist erforderlich, um übermäßig eifriges JDBC zu tolerieren, das ’extra_float_digits=2’ bedingungslos im Startpaket setzen möchte.
-
Protokollierung über syslog: neue Parameter syslog=0/1 und syslog_facility=daemon/user/local0.
-
Weniger riskanter Online-Neustart (-R)
-
Laden der FD vor fork ausführen, damit die Ausgabe auf der Konsole erfolgt und der Vorgang mit ^C abgebrochen werden kann.
-
SHUTDOWN nach fork belassen, damit ^C unbedenklich ist.
-
Ein connect() auf den Unix-Socket prüft, ob dort ein Prozess lauscht. Jetzt kann -R auch verwendet werden, wenn zuvor kein Prozess lief. Läuft bereits ein Prozess, wird aber -R nicht verwendet, schlägt der Start fehl.
-
-
Neue Konsolenbefehle:
-
SHOW TOTALS zeigt die Statistikzusammenfassung wie im Protokoll sowie den Speicherverbrauch.
-
SHOW ACTIVE_SOCKETS: Wie show sockets, jedoch auf aktive Sockets beschränkt.
-
-
-
Weniger sichtbare Funktionen
-
suspend_timeout: Blockierte Verbindungen und langwierige Anmeldungen abbrechen. Dies erhöht die Sicherheit bei Neustarts.
-
Clients benachrichtigen, wenn die entfernte Datenbank bei der Anmeldung einen Fehler meldet.
-
Eine Datenbank aus der Konfiguration zu entfernen und neu zu laden funktioniert: Alle Verbindungen werden getrennt und die Datenbank wird entfernt.
-
Bei den Konsolenbefehlen SHOW/SET einige Parameter nachbilden, um PostgreSQL ähnlicher zu sein. Dies war erforderlich, damit psycopg eine Verbindung zur Konsole herstellen kann. (client_encoding/default_transaction_isolation/datestyle/timezone)
-
Mit server_lifetime=0 die Serververbindung sofort nach der ersten Verwendung trennen. Zuvor bewirkte “0”, dass PgBouncer das Alter des Servers ignorierte. Da dieses Verhalten nicht dokumentiert war, sollte niemand darauf angewiesen sein.
-
Interne Verbesserungen:
-
Paketpuffer werden erst bei Bedarf zugewiesen und wiederverwendet. Dies sollte den Speicherverbrauch erheblich senken. Damit wird es auch praktikabel, bei vielen Verbindungen große pktbuf zu verwenden.
-
Zahlreiche Verbesserungen bei der Fehlerbehandlung. PgBouncer sollte OOM-Situationen jetzt geordnet bewältigen.
-
Slab-Allokator für die Speicherverwaltung verwenden.
-
Zahlreiche Codebereinigungen.
-
-
-
Fehlerbehebungen
- Bisher wurde pro Ereignisschleife nur ein accept() ausgeführt. Bei vielen Verbindungsversuchen konnte sich dadurch ein Rückstau aufbauen. Jetzt werden vom lauschenden Socket immer alle ausstehenden Verbindungen angenommen, was das Problem beheben sollte.
- EINTR von connect() behandeln.
- configure.ac mit autoconf 2.59 kompatibel machen.
- Kompatibilitätskorrekturen für Solaris (Magne Mæhre)
PgBouncer 1.1.x
2007-12-10 - PgBouncer 1.1.2 - „Der Hammer“
- Funktionen
- Verbindungstrennungen aufgrund von server_lifetime erfolgen jetzt im Abstand von (server_lifetime / pool_size) Sekunden. Dadurch löst PgBouncer keine Flut von Neuverbindungen aus.
- Fehlerbehebungen
- Probleme beim Online-Upgrade von 1.0 -> 1.1:
- 1.0 verfolgt Serverparameter nicht nach, sodass sie NULL bleiben. 1.1 rechnete damit jedoch nicht und stürzte ab.
- Sind Serverparameter unbekannt, aber entsprechende Clientparameter gesetzt, ein SET dafür ausführen, statt einen Fehler zu melden.
- Vorübergehende Debug-Anweisungen entfernt, die versehentlich auf Stufe INFO im Code verblieben waren und die Protokolle füllten.
- debian/changelog repariert.
- Probleme beim Online-Upgrade von 1.0 -> 1.1:
- Bereinigung
- Felder von struct SBuf für eine bessere Ausrichtung des Puffers neu anordnen.
2007-10-26 - PgBouncer 1.1.1 - „Breakdance-Biene“
- Fehlerbehebungen
- Der Cache für Serverparameter konnte uninitialisiert bleiben, wodurch unnötige SET-Anweisungen ausgeführt wurden. Dies führte unter 8.1 zu Problemen, da standard_conforming_strings dort nicht verändert werden darf. (Dank an Dimitri Fontaine für Bericht und Tests.)
- Einige Dokumentationsfehler korrigiert.
- doc/fixman.py in .tgz aufnehmen.
2007-10-09 - PgBouncer 1.1 - „Werkzeugkasten mit verrücktem Hut“
-
Funktionen
-
Folgende Serverparameter nachverfolgen:
client_encoding datestyle, timezone, standard_conforming_strings -
Erweiterungen der Datenbank-Verbindungszeichenfolge:
- Hostnamen in host= akzeptieren.
- Benutzerdefinierten Unix-Socket-Pfad in host= akzeptieren.
- Werte in Anführungszeichen akzeptieren: password=’ asd’‘foo’
-
Neue Konfigurationsvariable: server_reset_query wird unmittelbar nach der Freigabe gesendet.
-
Neue Konfigurationsvariable: server_round_robin zum Umschalten zwischen LIFO und RR.
-
Ein Abbruchpaket für eine inaktive Verbindung trennt diese nicht mehr.
-
Abbruch mit ^C aus psql funktioniert für SUSPEND / PAUSE.
-
FD-Grenzen beim Start ausgeben.
-
Beim Suspendieren möglichst schnell eine Paketgrenze erreichen.
-
’timezone’ zu den Datenbankparametern hinzufügen.
-
Dateideskriptor der Protokolldatei dauerhaft offen halten. Er wird bei SIGHUP / RELOAD erneut geöffnet.
-
Informationen zum lokalen Verbindungsendpunkt in SHOW SERVERS/CLIENTS/SOCKETS.
-
-
Codebereinigung
- Mehr Debug-Protokollmeldungen enthalten Socket-Informationen.
- Magische Zahlen entfernt und Fehlermeldungen bereinigt. (David Fetter)
- Wrapper-Struktur für Informationen zum aktuellen Paket. Dies verringert die Komplexität erheblich.
-
Fehlerbehebungen
- Ungültige Paketheader besser erkennen.
- Die Prüfung auf Änderungen an auth_file war fehlerhaft, wodurch PgBouncer die Datei zu häufig neu lud.
PgBouncer 1.0.x
2007-06-18 - PgBouncer 1.0.8 - „Jutsu der untoten Schaufel“
- Fehlerbehebungen
- Absturz bei der Verarbeitung von Abbruchpaketen behoben. (^C aus psql)
- Funktionen
- PAUSE
; RESUME ; funktioniert jetzt. - Parsing der Konsolenbefehle bereinigt.
- Aufwendige Assertion-Prüfung auf Listenzugehörigkeit deaktiviert.
- PAUSE
2007-04-19 - PgBouncer 1.0.7 - „Mit Vitamin A-Z“
- Fehlerbehebungen
- Mehrere Fehler-/Hinweispakete, zwischen denen send() blockierte, lösten eine Assertion aus. Durch vollständiges Entfernen der Flush-Logik behoben. Da PgBouncer selbst nichts aktiv puffert, ist sie nicht erforderlich. Sie stammte noch aus der Zeit, als die Pufferung mit MSG_MORE in den Kernel verlagert wurde.
- Außerdem vermeiden, die recv()-Logik aufzurufen, wenn das Senden nicht mehr blockiert.
- Der Listensuchcode für admin_users und stats_users behandelte Teiltreffer falsch. Dies wurde korrigiert.
- Ermittlung der UID des Unix-Socket-Peers auf getpeereid() vereinheitlicht.
2007-04-12 - PgBouncer 1.0.6 - „Tägliche Dosis“
- Fehlerbehebungen
- Die Korrektur zur Deaktivierung der Wartung während der Übernahme konnte die Wartung vollständig deaktivieren. Dies wurde behoben.
- Kompilierung unter FreeBSD korrigiert: <sys/ucred.h> benötigt dort <sys/param.h>. Dank an Robert Gogolok für den Bericht.
2007-04-11 - PgBouncer 1.0.5 - „Genug für heute“
- Fehlerbehebungen
- Fehler beim Online-Neustart behoben:
- ->ready für inaktive Server setzen.
- Veralteten Code aus use_client_socket() entfernen.
- Wartung während der Übernahme deaktivieren.
- Fehler beim Online-Neustart behoben:
2007-04-11 - PgBouncer 1.0.4 - „Der letzte ‚letzte‘ Fehler“
- Fehlerbehebungen
- Ein Hinweis von einem inaktiven Server markierte diesen als nicht bereinigt. release_server() rechnete damit nicht. Das Problem wurde durch Verwerfen behoben.
2007-04-11 - PgBouncer 1.0.3 - „Furchtloser Fork“
-
Fehlerbehebungen
- Im Anmeldepfad fehlte teilweise die Fehlerbehandlung, sodass eine dort abbrechende Verbindung Assertions auslösen konnte.
- Assertions in sbuf.c bereinigt, um Probleme früher zu erkennen.
- Core-Dump erzeugen, wenn Assert() auslöst.
-
Neuerungen
- Neue Konfigurationsvariablen: log_connections, log_disconnections, log_pooler_errors zum Ein- und Ausschalten ausführlicher Protokollausgaben.
- Konfigurationsvariable: client_login_timeout zum Trennen nicht mehr reagierender Verbindungen während der Anmeldung, die SUSPEND und damit den Online-Neustart blockieren könnten.
2007-03-28 - PgBouncer 1.0.2 - „Überschalllöffel“
- Fehlerbehebungen
- libevent kann innerhalb derselben Schleife ein bereits gelöschtes Ereignis melden. Die Wiederverwendung des Sockets für einen Schleifendurchlauf verhindern.
- release_server() aus disconnect_client() prüfte nicht, ob das Paket tatsächlich gesendet worden war.
2007-03-15 - PgBouncer 1.0.1 - „Außerirdische Technologie“
-
Fehlerbehebungen
- Die gemischte Verwendung zwischengespeicherter und nicht zwischengespeicherter Zeitwerte sowie ein vorzeichenloser usec_t-typedef führten zu unbegründeten query_timeout-Fehlern.
- Seltenen Fall behoben, bei dem ein Socket nach dem Aufwecken aus dem Warten auf das Senden blockiert bleiben konnte.
- Fairere Warteschlangen für Serververbindungen. Zuvor konnte eine neue Abfrage vor einer älteren eine Serververbindung erhalten.
- Freigabe des Servers verzögern, bis garantiert alles gesendet wurde.
-
Funktionen
- Befehl SHOW SOCKETS für detaillierte Zustandsinformationen.
- PgSocket-Zeiger ins Protokoll aufnehmen, um einzelne Verbindungen leichter nachzuverfolgen.
- In der Konsole SELECT anstelle von SHOW zulassen.
- Verschiedene Codebereinigungen.
2007-03-13 - PgBouncer 1.0 - „Getunter BMW“
- Erste öffentliche Version.