Zum Inhalt springen

Änderungsprotokoll

Versionsgeschichte und Versionshinweise zu PgBouncer

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_size seinen 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) und default_transaction_read_only (ab PostgreSQL 14) jetzt standardmäßig nachverfolgt. Bisher beeinflusste ein Client, der im Transaktions-Pooling-Modus SET search_path oder SET default_transaction_read_only = true ausführte, andere Clients, die später dieselbe Serververbindung verwendeten. (#1580 , #1573 )
    • Die Einstellung pool_idle_timeout zum 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_timeout kann pro Benutzer und pro Datenbank konfiguriert werden. (#1449 )
    • Die Statistik client_login_count zu SHOW STATS hinzugefü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_mode und pgbouncer.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_message hinzugefü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 )
  • Änderungen
    • Die veraltete Funktion für Online-Neustarts (-R, auch als Übernahme bezeichnet) entfernt, zusammen mit den Verwaltungsbefehlen SHOW FDS und SUSPEND, die nur zu ihrer Unterstützung vorhanden waren. Verwenden Sie stattdessen rollierende Neustarts mit so_reuseport . (#1581 )
    • Die maximale Passwortlänge auf 65535 Bytes erhöht, entsprechend libpq. (#1310 , #1520 )
    • Ein von auth_query zurückgegebener Benutzername NULL wird genauso behandelt wie ein Ergebnis ohne Zeilen und nicht mehr als Fehler. (#1569 )
    • SET extra_float_digits wird in der Verwaltungsdatenbank akzeptiert. Neuere PostgreSQL-JDBC-Treiber senden diesen Befehl beim Verbindungsaufbau. (#1550 )
    • mkauth.py kann 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_size oder evicted for max_user_connections statt lediglich evicted. (#1597 )
  • Fehlerbehebungen
    • Behoben, dass verspätete COPY-Nachrichten im Transaktions-Pooling-Modus den Pool erschöpften. Dadurch funktioniert COPY in 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_name mit einem langen Wert. (#1531 )
    • Behoben, dass Antworten auf vorbereitete Anweisungen in falscher Reihenfolge gesendet wurden, wenn ein Stapel Parse- und Close-Nachrichten ohne dazwischenliegendes Sync mischte. (#1555 )
    • Fehlerhaftes Verhalten bei Parametern behoben, die in track_extra_parameters aufgefü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_timeout Verbindungen 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_size in SHOW USERS für Benutzer einen Wert anzeigte, für die keiner konfiguriert war. (#1489 )
    • Die Fehlermeldung für den Verwaltungsbefehl ENABLE korrigiert. (#1308 )
    • Die Kompilierung mit künftigen OpenSSL-Versionen korrigiert, die struct asn1_string_st zu einem opaken Typ machen. (#1440 )
    • Verhindert, dass der Compiler das Löschen sensibler kryptografischer Daten vom Stack wegoptimiert. (#1508 )
    • Das Linken von pgbevent.dll mit clang unter Windows korrigiert. (#1571 )
    • Pfade von Dateien auf der obersten Ebene des Release-Tarballs korrigiert, die als pgbouncer-X.Y.Z/./configure statt als pgbouncer-X.Y.Z/configure gespeichert waren. (#1549 )
    • Ein Speicherleck beim Lesen von track_extra_parameters aus 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 )

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_CLIENT keine 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 Parameter admin_users aufgeführt sind.
  • Fehlerbehebungen

    • Die Dokumentation des Parameters default_pool_size präzisiert.
    • Die Dokumentation zu client_tls13_ciphers und server_tls13_ciphers korrigiert.

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:

      1. track_extra_parameters enthält search_path (keine Standardkonfiguration; vermutlich nur bei Konfigurationen mit Citus oder PostgreSQL 18 eingestellt)
      2. auth_user ist auf eine nicht leere Zeichenkette gesetzt (keine Standardkonfiguration)
      3. auth_query ist 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_options konfigurieren. (#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 CLIENTS hinzugefügt. (#1191 )
    • Die Einstellung transaction_timeout hinzugefü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_notify lässt sich diese Dauer ändern oder die Benachrichtigung deaktivieren. (#1264 )
    • Die Einstellung scram_iterations hinzugefügt, damit Betreiber zwischen Sicherheit und Authentifizierungsgeschwindigkeit abwägen können (#1339 )
    • client_tls13_ciphers und server_tls13_ciphers zur Auswahl der zu aktivierenden TLSv1.3-Cipher-Suites hinzugefügt. (#1352 )
  • Änderungen
    • Die Leistung der Ad-hoc-SCRAM-Authentifizierung erheblich verbessert. (#1338 )
    • KILL kann ohne Angabe einer Datenbank ausgeführt werden. Dies bedeutet jetzt, dass KILL fü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 RELOAD meldet 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_CLIENT ausführen. (#1305 )
    • mkauth.py so geändert, dass kein veraltetes drittes Feld mehr hinzugefügt wird (#1365 )
    • Die FATAL-Meldungen in den Funktionen disconnect_client und disconnect_server verbessert. (#1382 )
    • Die veraltete OpenSSL-Funktion EVP_PKEY_get0_EC_KEY wird 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-full korrigiert. (#1303 )
    • Einen seltenen FATAL-Fehler beim Weiterleiten von Abbruchanfragen behoben. (#1383 )
    • Die Sortierung der Parameter in SHOW CONFIG korrigiert. (#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.py zum Tarball hinzugefügt. (#1282 )
    • Probleme in Tests behoben, damit Debian-Paketbetreuer sie ausführen können. (#1266 , #1250 )
  • Dokumentation

    • Das Beispiel für auth_query aktualisiert, sodass es einen sicheren search_path setzt. (#1245 )

2025-01-10 - PgBouncer 1.24.0 - „Neues Jahr, neuer Türsteher“

  • Funktionen

    • Unterstützung für Type=notify-reload für systemd hinzugefügt. Dies erfordert systemd ab Version 253. (#1148 )
    • Den Befehl KILL_CLIENT zur Verwaltungskonsole hinzugefügt. Damit lässt sich eine Clientverbindung zwangsweise beenden. (#1147 )
    • Die Einstellung max_user_client_connections hinzugefügt, sowohl global als auch auf Benutzerebene. (#1137 )
    • Die Einstellung max_db_client_connections hinzugefügt, sowohl global als auch auf Datenbankebene. (#1138 )
    • Den Zähler current_client_connections zur Ausgabe von SHOW USERS und SHOW DATABASES hinzugefügt. (#1137 , #1138 )
    • Den Parameter load_balance_hosts hinzugefügt, mit dem sich festlegen lässt, dass keine Lastverteilung zwischen Hosts erfolgt. (#736 )
    • Nutzungszähler für vorbereitete Anweisungen in SHOW STATS verfügbar gemacht. (#1192 )
    • Die Einstellung client_idle_timeout hinzugefügt. (#1189 )
    • query_timeout und reserve_pool_size auf Benutzerebene hinzugefügt. (#1180 , #1228 )
    • Unterstützung für pam-Authentifizierung in HBA-Dateien aktiviert. (#326 )
  • Ä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_statements ist 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_retry wird der ursprüngliche Fehler an den Client zurückgegeben. (#1152 )
    • Bei einem Fehler in auth_query wird der ursprüngliche Serverfehler protokolliert. (#1187 )
    • Der Wert 0 für default_pool_size bedeutet unbegrenzte Größe. (#1227 )
    • Die Datenbankeinstellung reserve_pool in reserve_pool_size umbenannt. 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_sslmode in der Beispielkonfiguration korrigiert. (#1133 )
    • Den Hinweis auf einen ungültigen Alias für server_tls_protocols aus der Dokumentation entfernt. (#1155 )
    • Einen Fehler bei gleichzeitiger Verwendung von auth_query und 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_reuseport am 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 cert und peer hinzugefü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 )
  • Änderungen

    • Die Verbindungsliste in der Ausgabe von SHOW USERS verbessert. (#1040 )
    • pool_size kann pro Benutzer konfiguriert werden. (#1049 )
    • server_lifetime kann pro Datenbank konfiguriert werden. (#1057 )
    • Unterstützung für die Auflistung dynamisch erzeugter Benutzer in der Ausgabe von SHOW USERS hinzugefügt. (#1052 )
    • Unterstützung für den Adresstyp all in 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 )
  • Fehlerbehebungen

    • Probleme bei der Verarbeitung großer und unvollständiger Startpakete behoben. (#1058 )
    • Unterstützung für das Format --config=value im Startparameter options hinzugefügt. (#1064 )
    • Die Berechnung der Metrik avg_wait_time korrigiert. (#727 )
    • Unterstützung für das Aushandeln der Postgres-Protokollversion mit dem Client hinzugefügt. (#1007 )
    • Die Erfassung einer ausstehenden Anfrage für auth_query hinzugefü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)

2024-01-31 - PgBouncer 1.22.0 - „DEALLOCATE ALL“

  • Funktionen

    • Unterstützung für DEALLOCATE ALL und DISCARD ALL hinzugefügt, wenn max_prepared_statements auf einen Wert ungleich null gesetzt ist (normales DEALLOCATE wird weiterhin nicht unterstützt) (#972 )
    • auth_query kann pro Datenbank konfiguriert werden (#979 )
  • Änderungen

    • Die Einstellungen in der empfohlenen systemd-Unit-Datei verbessert (#983 )
    • Die Fail-Fast-Logik behandelt alle Szenarien, in denen keine funktionierenden Verbindungen zur Datenbank mehr bestehen und keine hergestellt werden können (#998 )
    • Mehrere Verbesserungen an der Dokumentation
  • Fehlerbehebungen

    • Ein Problem in PG14+ behoben, bei dem PgBouncer für jede Transaktion SET DateStyle='ISO' sendete (#879 )
    • Die Behandlung eines leeren application_name korrigiert (#999 )
    • Das Bauen unter Windows mit OpenSSL 3.2.0 korrigiert (#1009 )

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_statements auf 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 zu max_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 )
  • Ä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_size wird bei Pools mit einem erzwungenen Benutzer auch dann eingehalten, wenn keine Clients mit PgBouncer verbunden sind (#947 )
    • Die Kodierung von peer_id im 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_dbname nicht 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
    • Eine Regression behoben, bei der das Eintragen von options in ignore_startup_parameters nicht mehr dazu führte, dass unbekannte Parameter im Startparameter options ignoriert wurden. (#908 ) (Regression in 1.20.0 eingeführt)
    • Einen verwirrenden Tippfehler in der Dokumentation korrigiert (#917 )

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_reuseport und peers empfohlen. 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 )
  • Funktionen

    • track_extra_parameters eingeführt, um im Transaktions-Pooling-Modus weitere Parameter nachverfolgen zu können. Bisher verfolgte PgBouncer nur application_name, DateStyle, TimeZone und standard_conforming_strings. Jetzt wird auch IntervalStyle standardmäßig nachverfolgt. Durch Ändern von track_extra_parameters lassen 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 auch search_path an den Client zurückmeldet. Wenn Sie Citus verwenden, können Sie deshalb search_path zur Einstellung track_extra_parameters hinzufü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_sslmode auf prefer geändert. (#866 )
    • Unterstützung für den Startparameter options hinzugefügt. Dies ermöglicht die Verwendung der Umgebungsvariable PGOPTIONS, die psql und libpq unterstützen . Mit dieser Variable lassen sich beliebige PostgreSQL-Parameter beim Start setzen. Dies funktioniert nur für PostgreSQL-Parameter, die PgBouncer über track_extra_parameters nachverfolgt. (#878 )
  • Fehlerbehebungen

    • Kein Absturz mehr, wenn die Verwaltungsdatenbank pgbouncer als 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_cache in SHOW MEM korrigiert. Bisher wurde er fälschlich als db_cache angezeigt. (#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_connections auf 1 gesetzt ist. (#883 )

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_dbname hinzugefügt. Sie legt fest, in welcher Datenbank auth_query ausgeführt wird. (#764 )
    • Den Befehl SHOW STATE hinzugefü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_timeout hinzugefügt. Sie bestimmt, nach welcher Zeit das Weiterleiten einer Abbruchanfrage aufgegeben wird. Der Standardwert beträgt 10 Sekunden. (#833 )
    • Neues Testframework (#792 )
  • 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_server für einen Server im Zustand BEING_CANCELED korrigiert. (#815 ) (in 1.18.0 eingeführt)
    • Beim Empfang von SIGTERM wird PgBouncer nicht mit einem Status ungleich null beendet. (#834 )
    • Der Start wird mit einem Fehler abgebrochen, wenn ein Socket in unix_socket_dir nicht erstellt werden konnte. (#830 )
    • Der Start wird mit einem Fehler abgebrochen, wenn an keiner der Adressen in listen_addr gelauscht werden konnte. (#838 )
    • Beim Fehlschlagen von sbuf_connect werden 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

    • application_name zur Ausgabe von SHOW CLIENTS/SERVERS/SOCKETS hinzugefügt (#449 )
    • Informationen über Abbruchanfragen zur Ausgabe von SHOW CLIENTS/SERVERS/POOLS hinzugefügt (#782 )
  • Fehlerbehebungen

    • Die Operation sbuf_send_pending schlä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_size zu erreichen (#648 )
    • SHOW HELP mit 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 )
  • 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_file entfernt. auth_file wird 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_type in der Beispielkonfiguration pgbouncer.ini auf md5 geä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_accept verbessert. 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 -v statt des veralteten which.
    • 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 check funktioniert 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 POOLS angezeigt.
  • 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_size und reserve_pool_size korrigiert. 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 CONFIG zeigt jetzt auch die Standardwerte der Einstellungen an.
  • Fehlerbehebungen

    • Die Option so_reuseport unter 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_user korrigiert. 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 )
  • 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.txt oder auth_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/postgresql die Erstellung der Unix-Domain-Sockets zu überlassen.
    • Unterstützung für Unix-Domain-Sockets unter Windows hinzugefügt.
  • Bereinigungen

    • Eine alternative, kleinere Beispielkonfiguration pgbouncer-minimal.ini für Tests oder den Einsatz hinzugefügt.

PgBouncer 1.13.x

2020-04-27 - PgBouncer 1.13.0 - „Mein Lieblingsspiel“

  • Funktionen

    • Die Konfigurationseinstellung tcp_user_timeout zum Setzen der entsprechenden Socket-Option hinzugefügt.
    • client_tls_protocols und server_tls_protocols haben jetzt den Standardwert secure. 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=notify verwenden. Eine weitergehende Integration ist für zukünftige Versionen geplant.
  • Fehlerbehebungen

    • Mehrzeilige Protokollmeldungen korrigiert (libusual #24 )
    • Von auth_query zurückgegebene Nullwerte für Benutzernamen korrekt behandeln (#340 )
  • Bereinigungen

    • Die Dateien zur Debian-Paketerstellung unter debian entfernt. 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_SUDO explizit 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.

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_REUSEPORT hinzugefü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 VERSION wird als normale Ergebniszeile statt als NOTICE-Nachricht gesendet. Das erleichtert die Verarbeitung und entspricht dem Verhalten anderer SHOW-Befehle.
  • Fehlerbehebungen

    • Statistikspalten werden als numeric statt als bigint gesendet. Dies verhindert Fehler in einigen Clientbibliotheken bei Werten, die den Wertebereich von bigint ü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.
  • Bereinigungen

    • Das Ziel make check hinzugefü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.

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-256 wurde ergänzt.
    • auth_type=password wird bei einem gespeicherten md5-Passwort so behandelt, wie es ein PostgreSQL-Server tun würde. (#129 )
    • Die Option log_stats hinzugefü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.
  • Fehlerbehebungen
    • Den OpenSSL-Test in configure bei neueren OpenSSL-Versionen mit -Werror korrigiert.
    • Die Berechnung der Wartezeit mit auth_user korrigiert. 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”.
  • 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 FDS behoben (#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_timeout korrigiert (#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.h in den Distributions-Tarball aufgenommen. Ihr Fehlen hatte jeglichen Build aus dem Tarball von 1.8 verhindert.

2017-12-19 - PgBouncer 1.8 - „Sicher am Steuer“

  • Funktionen
    • PAM-Authentifizierung unterstützt. (Mit --with-pam aktivieren.)
    • Die Felder paused und disabled zur Ausgabe von SHOW DATABASES hinzugefügt.
    • Das Feld maxwait_us zur Ausgabe von SHOW POOLS hinzugefügt.
    • Die Felder wait und wait_us zur Ausgabe der SHOW-Befehle hinzugefügt.
    • Die neuen Befehle SHOW STATS_TOTALS und SHOW STATS_AVERAGES hinzugefügt.
    • Abfragen und Transaktionen werden in SHOW STATS getrennt erfasst. Die Felder total_requests, avg_req und avg_query wurden durch neue Felder ersetzt.
    • wait_time zu SHOW STATS hinzugefügt.
  • Fehlerbehebungen
    • Die aktualisierte libusual unterstützt OpenSSL 1.1.
    • Es wird nicht versucht, TLS auf Unix-Sockets zu verwenden.
    • Beim Parsen von pg_hba.conf wird 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_user ist jetzt auch global zulässig, nicht nur pro Datenbank. (#142 )
    • Die Client- und Serverkodierung der Konsole auf UTF8 setzen.

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
    • Builds durch Entfernen der DBGVER-Verarbeitung reproduzierbar gemacht. (#112 )
    • Antimake: Dateiliste aus $(wildcard) sortieren; neuere gmake-Versionen sortieren sie nicht mehr. (#111 )
    • libssl-Version im Protokoll anzeigen.
    • deb: Vollständige Härtung aktivieren.

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/-full weist jetzt Verbindungen ohne Clientzertifikat ab. (#104 )
    • TLS: client_tls_sslmode=allow/require validiert 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_query verbessert. (#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_timeout standardmäß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_always standardmäß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, wird server_reset_query fü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_user entfernt. (#69) Wenn auth_user gesetzt ist und der Client einen nicht vorhandenen Benutzernamen angibt, meldet sich der Client als auth_user an. Das ist problematisch.

      CVE-2015-6817

    • NoticeResponse in handle_auth_response überspringen. Andernfalls führen ausführliche Protokollierungsstufen auf dem Server zu Anmeldefehlern.

    • Konsole: auth_user belegen, 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.

      CVE-2012-4575

  • 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_NAME
      

      Zum Beenden und Aufheben der Registrierung:

      > net stop SERVICE_NAME
      > pgbouncer.exe config.ini -unregservice
      

      Für das Windows-Ereignisprotokoll muss zunächst die Ereignis-DLL registriert werden:

      > regsvr32 pgbevent.dll
      

      Anschließ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.
  • 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.

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.

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.