PostgreSQL ist ein Open-Source-, leistungsfähiges, zuverlässiges, stabiles, unternehmensbereites und kostenloses objektrelationales Datenbanksystem im Stil von MariaDB-, MySQL- oder SQLite-Projekten. Es ist ein ACID (Atomicity, Consistency, Isolation, Durability) -kompatibler Datenbank-Server / Engine, der hochgradig angepasst werden kann und zahlreiche attraktive Funktionen enthält, die einen großen Ersatz für die oben genannten Datenbank-Engines darstellen.
Funktionen auf einen Blick
Zu den wichtigsten Funktionen gehören die Unterstützung von Fremdschlüsseln, Sichten, Joins, Triggern und gespeicherten Prozeduren, die Unterstützung mehrerer Sprachen, Unterstützung für eine Vielzahl von SQL-Datentypen, einschließlich BOOLEAN, CHAR, INTEGER, NUMERIC, VARCHAR, INTERVAL, TIMESTAMP und DATE.
Darüber hinaus unterstützt die Software binäre große Objekte, einschließlich aller Arten von Multimedia-Dateien (Video, Audio und Foto), und bietet Entwicklern native Programmierschnittstellen für C, C ++, Python, Perl, Ruby, Java, .Net, Tcl und ODBC Programmiersprachen.
Neben anderen interessanten Features können wir MVCC (Multi-Version Concurrency Control), Tablespaces, Multibyte-Zeichenkodierungen, Point-in-Time-Recovery, einen ausgereiften Abfrageoptimierer und -planer, asynchrone Replikation, Online-Backups, verschachtelte Transaktionen (allgemein bekannt als Savepoints), Hot Backups, Write Ahead Logging für Fehlertoleranz, Unterstützung für internationale Zeichensätze sowie Unicode-Unterstützung.
PostgreSQL in Zahlen
Momentan unterstützt der PostgreSQL-Datenbankserver unbegrenzte Größe für Datenbanken, 32 TB sollte die maximale Größe für Tabellen sein, 1,6 TB pro Zeile, 1 GB pro Feld, unbegrenzte Zeilen pro Tabelle, unterstützt zwischen 250 und 1600 Spalten pro Tabelle , abhängig von Spaltentypen, und unterstützt unbegrenzte Indizes pro Tabelle.
Unterstützte Betriebssysteme
PostgreSQL wurde erfolgreich auf allen gängigen Betriebssystemen getestet, darunter GNU / Linux, BSD, Solaris, HP-UX, AIX, SGI IRIX, Solaris, Tru64, Mac OS X und Microsoft Windows. PostgreSQL steht zum Download als universelles Quellarchiv sowie als vorkompilierte Binärpakete für viele Linux-Distributionen zur Verfügung, die sowohl 32-Bit- als auch 64-Bit-Architekturen unterstützen.
Was ist neu
? stark> in dieser Version:
- Diese Version behebt zwei Sicherheitsprobleme. Diese Version behebt auch Probleme, die bei VACUUM-, GIN- und Hash-Indizes, paralleler Abfrage, logischer Replikation und anderen in den letzten drei Monaten gemeldeten Fehlern gefunden wurden. Alle Benutzer, die die betroffenen Versionen von PostgreSQL verwenden, sollten diese so schnell wie möglich aktualisieren.
Was ist neu in Version 10.4 / 11 Beta 1:
- Diese Version behebt zwei Sicherheitsprobleme. Diese Version behebt auch Probleme, die bei VACUUM-, GIN- und Hash-Indizes, paralleler Abfrage, logischer Replikation und anderen in den letzten drei Monaten gemeldeten Fehlern gefunden wurden. Alle Benutzer, die die betroffenen Versionen von PostgreSQL verwenden, sollten diese so schnell wie möglich aktualisieren.
Was ist neu in der Version:
- Weitere Einschränkung der Sichtbarkeit von pg_user_mappings.umoptions, um Passwörter zu schützen, die als Benutzerzuordnungsoptionen gespeichert sind (Noah Misch)
- Das Update für CVE-2017-7486 war nicht korrekt: Es ermöglichte einem Benutzer, die Optionen in seiner eigenen Benutzerzuordnung zu sehen, auch wenn sie keine USAGE-Berechtigung auf dem zugehörigen fremden Server hatte. Solche Optionen können ein Kennwort enthalten, das vom Serverbesitzer und nicht vom Benutzer selbst bereitgestellt wurde. Da information_schema.user_mapping_options die Optionen in solchen Fällen nicht anzeigt, sollte pg_user_mappings auch nicht. (CVE-2017-7547)
- Dieser Patch behebt nur das Verhalten in neu initiierten Datenbanken. Wenn Sie diese Änderung in einer vorhandenen Datenbank anwenden möchten, müssen Sie Folgendes tun:
- Starten Sie den Postmaster neu, nachdem Sie postgresql.conf allow_system_table_mods = true hinzugefügt haben. (In Versionen, die ALTER SYSTEM unterstützen, können Sie damit die Konfiguration ändern, aber Sie benötigen immer noch einen Neustart.)
- Führen Sie in jeder Datenbank des Clusters die folgenden Befehle als Superuser aus:
- SET Suchpfad = pg_catalog;
- ERSTELLEN ODER REPLACE VIEW pg_user_mappings AS
- WÄHLEN
- U.oid AS um,
- S.oid AS srvid,
- S.srvname AS srvname,
- U.umuser AS umuser,
- FALL WENN U.umuser = 0 THEN
- 'öffentlich'
- SONST
- A.rolname
- END AS username,
- CASE WHEN (U.umuser 0 UND A.rolname = current_user
- UND (pg_has_role (s.srvowner, 'USAGE')
- ODER has_server_privilege (S.oid, 'USAGE')))
- ODER (U.umuser = 0 UND pg_has_role (s.srvowner, 'USAGE'))
- ODER (SELECT rolsuper FROM pg_authid WHERE rolname = aktueller_Benutzer)
- DANN U.umoptionen
- SONST NULL ENDE AS umoptions
- VON pg_user_mapping U
- LINKE VERBINDUNG pg_authid Ein ON (A.oid = U.umuser) JOIN
- pg_foreign_server S EIN (U.umserver = S.oid);
- Vergessen Sie nicht, die Datenbanken template0 und template1 einzuschließen, oder die Sicherheitslücke besteht weiterhin in Datenbanken, die Sie später erstellen. Um template0 zu beheben, müssen Sie vorübergehend Verbindungen zulassen. In PostgreSQL 9.5 und höher können Sie verwenden
- ALTER DATABASE template0 MIT ALLOW_CONNECTIONS true;
- und dann nach dem Reparieren von template0, rückgängig machen mit
- ALTER DATABASE template0 MIT ALLOW_CONNECTIONS false;
- In früheren Versionen verwenden Sie stattdessen
- UPDATE pg_database SET datallowconn = wahr WHERE datname = 'template0';
- UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
- Abschließend entfernen Sie die Konfigurationseinstellung allow_system_table_mods und starten Sie den postmaster erneut.
- Verbieten Sie leere Passwörter in allen Passwort-basierten Authentifizierungsmethoden (Heikki Linnakangas)
- libpq ignoriert leere Kennwortspezifikationen und überträgt sie nicht an den Server. Wenn das Passwort eines Benutzers auf die leere Zeichenfolge gesetzt wurde, ist es unmöglich, sich mit diesem Passwort über psql oder andere libpq-basierte Clients anzumelden. Ein Administrator könnte daher glauben, dass das Festlegen des Kennworts auf "leer" dem Deaktivieren der Kennwortanmeldung entspricht. Bei einem modifizierten oder nicht-libpq-basierten Client ist jedoch eine Anmeldung möglich, je nachdem, welche Authentifizierungsmethode konfiguriert ist. Insbesondere die gängigste Methode, md5, akzeptierte leere Passwörter. Ändern Sie den Server, um in allen Fällen leere Kennwörter abzulehnen. (CVE-2017-7546)
- Machen Sie lo_put () auf die UPDATE-Berechtigung für das große Zielobjekt (Tom Lane, Michael Paquier) prüfen
- lo_put () sollte sicherlich die gleichen Berechtigungen wie lowrite () haben, aber die Prüfung fehlte, sodass jeder Benutzer die Daten in einem großen Objekt ändern konnte. (CVE-2017-7548)
- Korrigieren Sie die Dokumentation zum Prozess zum Aktualisieren von Standby-Servern mit pg_upgrade (Bruce Momjian)
- Die vorherige Dokumentation wies Benutzer an, den primären Server nach der Ausführung von pg_upgrade, aber vor der Synchronisierung der Standby-Server zu starten / stoppen. Diese Reihenfolge ist unsicher.
- Fixes gleichzeitiges Sperren von Tupel-Update-Ketten (Alvaro Herrera)
- Wenn mehrere Sitzungen gleichzeitig eine Tupel-Update-Kette mit nicht konfligierenden Sperrmodi unter Verwendung eines alten Snapshots sperren und alle erfolgreich sind, war es möglich, dass einige von ihnen aufgrund eines Rennens dennoch fehlschlagen (und zu dem Schluss kommen, dass es keine Live-Tupel-Version gibt) Bedingung. Dies hatte Folgen, wie zum Beispiel das Überprüfen von Fremdschlüsseln, ein Tupel zu sehen, das definitiv existiert, aber gleichzeitig aktualisiert wird.
- Korrigiert potentielle Datenkorruption beim Einfrieren eines Tupels, dessen XMAX ein Multiexakt mit genau einem noch interessanten Element (Teodor Sigaev) ist
- Vermeiden Sie Integer-Überlauf und folgenden Absturz beim Sortieren von mehr als einer Milliarde Tupel im Speicher (Sergey Koposov)
- Versuchen Sie unter Windows, die Erstellung des Prozesses erneut zu versuchen, wenn wir den Adressbereich für unseren gemeinsamen Speicher im neuen Prozess (Tom Lane, Amit Kapila) nicht reservieren können
- Es wird erwartet, dass es zu seltenen Fehlern beim Start von untergeordneten Prozessen kommt, die wahrscheinlich auf Störungen durch Antivirus-Produkte zurückzuführen sind.
- Korrigieren Sie in Windows-Builds (Thomas Munro, Tom Lane) die Verfälschung der Shared Prädicate-lock-Hashtabelle mit geringer Wahrscheinlichkeit
- Vermeiden Sie, sauberes Schließen einer SSL-Verbindung zu protokollieren, als ob es sich um eine Verbindungszurücksetzung handeln würde (Michael Paquier)
- Verhindert das Senden von SSL-Sitzungstickets an Clients (Tom Lane)
- Dieser Fix verhindert erneute Verbindungsfehler mit ticketfähigem clientseitigen SSL-Code.
- Fix-Code zum Einstellen von tcp_keepalives_idle unter Solaris (Tom Lane)
- Korrigiert den Statistik-Collector, um Anfragenachrichten zu berücksichtigen, die unmittelbar nach einem Postmaster-Shutdown und einem sofortigen Neustart (Tom Lane) ausgegeben wurden
- Statistikanfragen, die innerhalb einer halben Sekunde nach dem vorherigen Postmaster-Shutdown ausgeführt wurden, wurden effektiv ignoriert.
- Stellen Sie sicher, dass die Empfangspuffergröße des Statistiksammlers mindestens 100 KB (Tom Lane) beträgt
- Dies reduziert das Risiko von verlorenen Statistikdaten auf älteren Plattformen, deren Standardempfangspuffergröße geringer ist als diese.
- Korrigiert die mögliche Erstellung eines ungültigen WAL-Segments, wenn eine Standby-Datei gerade befördert wird, nachdem ein XLOG_SWITCH WAL-Datensatz (Andres Freund) verarbeitet wurde
- Fix walsender, um sofort zu beenden, wenn der Client das Herunterfahren anfordert (Tom Lane)
- Behebung von SIGHUP- und SIGUSR1-Handling in Walserver-Prozessen (Petr Jelinek, Andres Freund)
- Verhindert von Walsender ausgelöste Panics während der Abschalt-Checkpoints (Andres Freund, Michael Paquier)
- Repariere unnötige langsame Neustarts von Walreceiver-Prozessen aufgrund der Race Condition beim Postmaster (Tom Lane)
- Behebung von Lecks kleiner Subtransaktionen, die bei der logischen Decodierung (Andres Freund) auf die Festplatte ausgelaufen sind
- Dies führte dazu, dass temporäre Dateien zu viel Speicherplatz benötigten.
- Reduzieren Sie die Arbeit, die zum Erstellen von Snapshots während der Erstellung von Slots für logische Decodierung erforderlich ist (Andres Freund, Petr Jelinek)
- Der vorherige Algorithmus war auf einem Server mit vielen offenen Transaktionen unerschwinglich teuer.
- Eine Racebedingung wurde behoben, die die Erstellung von Slots für logische Decodierung (Andres Freund, Petr Jelinek) auf unbestimmte Zeit verzögern konnte.
- Reduzieren Sie den Overhead bei der Verarbeitung von Syscache-Invalidierungsereignissen (Tom Lane)
- Dies ist besonders hilfreich für die logische Decodierung, die häufige Cache-Invalidierungen auslöst.
- Inkorrekte Heuristik entfernen, die in einigen Fällen verwendet wurde, um die Join-Selektivität basierend auf dem Vorhandensein von Fremdschlüsseleinschränkungen (David Rowley) zu schätzen
- In einigen Fällen, in denen eine mehrspaltige Fremdschlüsseleinschränkung existierte, aber nicht genau mit der Join-Struktur einer Abfrage übereinstimmte, verwendete der Planer eine Schätzungsheuristik, die sich als überhaupt nicht gut erwies. Stellen Sie solche Fälle auf die Weise zurück, wie sie vor 9.6 geschätzt wurden.
- Beheben Sie Fälle, in denen ein INSERT oder UPDATE mehr als einem Element einer Spalte vom Typ "Domain-over-Array" (Tom Lane) zugewiesen ist
- Erlaubt die Verwendung von Fensterfunktionen in Unter-SELECTs innerhalb der Argumente einer Aggregatfunktion (Tom Lane)
- Stellen Sie sicher, dass die CHECK OPTIONS-Klausel einer Sicht ordnungsgemäß erzwungen wird, wenn die zugrunde liegende Tabelle eine Fremdtabelle (Etsuro Fujita) ist
- Zuvor wurde das Update möglicherweise vollständig auf den fremden Server übertragen, die Überprüfung der Ansichtsbedingungen wurde jedoch versäumt.
- Verschieben Sie automatisch erzeugte Array-Typen während ALTER ... RENAME (Vik Fearing) aus dem Weg
- Zuvor würden wir einen in Konflikt stehenden automatisch generierten Arraytyp während CREATE umbenennen; Dieser Fix erweitert dieses Verhalten auf Umbenennungsvorgänge.
- Behinde den Changierzeiger in ALTER TABLE, wenn es einen Kommentar zu einer Einschränkung gibt, die zur Tabelle gehört (David Rowley)
- Das erneute Anwenden des Kommentars auf die rekonstruierte Einschränkung kann mit einer seltsamen Fehlermeldung oder sogar einem Absturz fehlschlagen.
- Stellen Sie sicher, dass ALTER USER ... SET alle Syntaxvarianten akzeptiert, die ALTER ROLE ... SET (Peter Eisentraut) vornimmt
- Zulassen, dass die CHECK-Bedingungen einer fremden Tabelle anfänglich NICHT gültig sind (Amit Langote)
- CREATE TABLE löscht automatisch NOT VALID-Spezifizierer für CHECK-Constraints, was darauf hinweist, dass die Tabelle leer sein muss, damit die Constraint sofort validiert werden kann. Aber das ist falsch für CREATE FOREIGN TABLE, wo es keinen Grund zu der Annahme gibt, dass die zugrundeliegende Tabelle leer ist, und selbst wenn es nicht unsere Aufgabe ist, zu entscheiden, dass die Einschränkung als gültig behandelt werden kann. Überspringen Sie diese & quot; Optimierung & quot; für fremde Tabellen.
- Aktualisieren Sie die Abhängigkeitsinformationen ordnungsgemäß, wenn Sie das Argument oder den Rückgabetyp einer Datentyp-E / A-Funktion von opak in den richtigen Typ (Heikki Linnakangas) ändern
- CREATE TYPE aktualisiert E / A-Funktionen, die in diesem lange veralteten Stil deklariert wurden, aber es hat vergessen, eine Abhängigkeit vom Typ aufzuzeichnen, wodurch ein nachfolgender DROP TYPE defekte Funktionsdefinitionen zurücklassen kann.
- Erlaube Parallelität im Abfrageplan, wenn COPY vom Ergebnis einer Abfrage kopiert (Andres Freund)
- Reduzieren Sie die Speicherauslastung, wenn ANALYZE eine tsvector-Spalte (Heikki Linnakangas) verarbeitet
- Korrigieren Sie unnötige Präzisionsverluste und schlampige Rundungen, wenn Sie Geldwerte mit Ganzzahlen oder Gleitkommawerten multiplizieren oder teilen (Tom Lane)
- Verschärfte Prüfungen auf Leerzeichen in Funktionen, die Kennungen analysieren, z. B. regprocedurein () (Tom Lane)
- Abhängig vom vorherrschenden Gebietsschema könnten diese Funktionen Fragmente von Multibyte-Zeichen als Leerzeichen interpretieren.
- Verwenden Sie beim Erstellen von PL / Perl (Ashutosh Sharma, Tom Lane) die relevanten #define-Symbole von Perl.
- Dies vermeidet Portabilitätsprobleme, die sich typischerweise in Form eines "Handshake" -Systems manifestieren. Nichtübereinstimmung beim Laden der Bibliothek, wenn mit aktuellen Perl-Versionen gearbeitet wird.
- Setzen Sie in libpq den GSS / SASL- und SSPI-Authentifizierungsstatus nach einem fehlgeschlagenen Verbindungsversuch (Michael Paquier) richtig zurück
- Dies hat dazu geführt, dass beim Ausfall von SSL auf Nicht-SSL-Verbindungen ein GSS / SASL-Fehler beim SSL-Versuch immer dazu führt, dass der Nicht-SSL-Versuch fehlschlägt. SSPI ist nicht gescheitert, aber es hat Speicher durchgesickert.
- Reparieren Sie in psql den Fehler, wenn COPY FROM STDIN mit einem Tastatur-EOF-Signal beendet wird und dann ein weiterer COPY FROM STDIN versucht wird (Thomas Munro)
- Dieses Fehlverhalten wurde auf BSD-basierten Plattformen (einschließlich macOS) beobachtet, aber nicht bei den meisten anderen.
- Repariere pg_dump und pg_restore, um REFRESH MATERIALIZED VIEW Befehle zuletzt (Tom Lane) zu senden
- Dies verhindert Fehler beim Sichern / Wiederherstellen, wenn eine materialisierte Ansicht auf Tabellen verweist, die einem anderen Benutzer gehören.
- Verbessern Sie pg_dump / pg_restores Meldung von Fehlerzuständen, die von zlib stammen (Vladimir Kunschikov, Alvaro Herrera)
- Fix pg_dump mit der Option --clean, um Ereignisauslöser wie erwartet (Tom Lane) zu löschen
- Es weist nun auch das Eigentumsrecht für Ereignisauslöser korrekt zu; Zuvor wurden sie wiederhergestellt, da sie dem Superuser gehören, der das Wiederherstellungsskript ausführt.
- Fix pg_dump mit der Option --clean, um nicht fehlzuschlagen, wenn das öffentliche Schema nicht existiert (Stephen Frost)
- Fix pg_dump, um ungültiges SQL für eine leere Operatorklasse (Daniel Gustafsson) nicht auszugeben
- Fix pg_dump Ausgabe auf stdout auf Windows (Kuntal Ghosh)
- Ein komprimierter Klartext-Dump, der in stdout geschrieben wird, enthält fehlerhafte Daten, da der Dateideskriptor nicht in den binären Modus versetzt werden kann.
- Korrigiert pg_get_ruledef (), um die korrekte Ausgabe für die ON SELECT-Regel einer Ansicht zu drucken, deren Spalten umbenannt wurden (Tom Lane)
- In einigen Fällen verwendet pg_dump pg_get_ruledef (), um Sichten auszugeben, so dass dieser Fehler zu Dump / Reload-Fehlern führen kann.
- Fixes Dumping von äußeren Joins mit leeren Constraints, wie das Ergebnis eines NATURAL LEFT JOIN ohne gemeinsame Spalten (Tom Lane)
- Fix dumping von Funktionsausdrücken in der FROM-Klausel in Fällen, in denen der Ausdruck nicht in etwas, das wie ein Funktionsaufruf (Tom Lane) aussieht, zerlegt wird
- Fix pg_basebackup Ausgabe auf stdout unter Windows (Haribabu Kommi)
- Eine in stdout geschriebene Sicherung enthält beschädigte Daten, weil der Dateideskriptor nicht in den binären Modus versetzt wurde.
- Reparieren Sie pg_rewind, um Dateien mit mehr als 2 GB (Kuntal Ghosh, Michael Paquier) richtig zu behandeln
- Normalerweise werden solche Dateien nicht in PostgreSQL-Datenverzeichnissen angezeigt, aber sie können in einigen Fällen vorhanden sein.
- Fix pg_upgrade, um sicherzustellen, dass der endende WAL-Datensatz kein wal_level = minimum (Bruce Momjian) hat
- Diese Bedingung könnte verhindern, dass aktualisierte Standby-Server die Verbindung wiederherstellen.
- Fix pg_xlogdumps Berechnung der WAL-Datensatzlänge (Andres Freund)
- Stellen Sie in postgres_fdw nach den Befehlen ALTER SERVER oder ALTER USER MAPPING (Kyotaro Horiguchi) Verbindungen zu entfernten Servern wieder her
- Dies stellt sicher, dass Optionsänderungen, die sich auf Verbindungsparameter auswirken, sofort angewendet werden.
- Ermöglichen Sie in postgres_fdw das Löschen von Fernsteuerbefehlen (Robert Haas, Rafia Sabih)
- Diese Änderung ermöglicht es uns, in vielen weiteren Fällen schnell auf einen nicht reagierenden Remote-Server zu warten.
- Erhöhen Sie MAX_SYSCACHE_CALLBACKS, um mehr Platz für Erweiterungen (Tom Lane) zu schaffen
- Verwenden Sie immer -fPIC, nicht -fpic, wenn Sie gemeinsam genutzte Bibliotheken mit gcc (Tom Lane) erstellen
- Dies unterstützt größere Erweiterungsbibliotheken auf Plattformen, wo es einen Unterschied macht.
- Behandeln Sie in MSVC-Builds den Fall, in dem sich die openssl-Bibliothek nicht in einem VC-Unterverzeichnis (Andrew Dunstan) befindet
- Fügen Sie in MSVC-Builds den richtigen Include-Pfad für libxml2-Headerdateien (Andrew Dunstan) hinzu
- Dies behebt eine frühere Notwendigkeit, Dinge in normalen Windows-Installationen von libxml2 zu verschieben.
- Erkennen Sie in MSVC-Builds eine Tcl-Bibliothek mit dem Namen tcl86.lib (Noah Misch)
- Bei MSVC-Builds werden die Einstellungen von PROVE_FLAGS in der Befehlszeile von vcregress.pl (Andrew Dunstan) berücksichtigt
Was ist neu in Version 9.6.4:
- Weitere Einschränkung der Sichtbarkeit von pg_user_mappings.umoptions, um Passwörter zu schützen, die als Benutzerzuordnungsoptionen gespeichert sind (Noah Misch)
- Das Update für CVE-2017-7486 war nicht korrekt: Es ermöglichte einem Benutzer, die Optionen in seiner eigenen Benutzerzuordnung zu sehen, auch wenn sie keine USAGE-Berechtigung auf dem zugehörigen fremden Server hatte. Solche Optionen können ein Kennwort enthalten, das vom Serverbesitzer und nicht vom Benutzer selbst bereitgestellt wurde. Da information_schema.user_mapping_options die Optionen in solchen Fällen nicht anzeigt, sollte pg_user_mappings auch nicht. (CVE-2017-7547)
- Dieser Patch behebt nur das Verhalten in neu initiierten Datenbanken. Wenn Sie diese Änderung in einer vorhandenen Datenbank anwenden möchten, müssen Sie Folgendes tun:
- Starten Sie den Postmaster neu, nachdem Sie postgresql.conf allow_system_table_mods = true hinzugefügt haben. (In Versionen, die ALTER SYSTEM unterstützen, können Sie damit die Konfiguration ändern, aber Sie benötigen immer noch einen Neustart.)
- Führen Sie in jeder Datenbank des Clusters die folgenden Befehle als Superuser aus:
- SET Suchpfad = pg_catalog;
- ERSTELLEN ODER REPLACE VIEW pg_user_mappings AS
- WÄHLEN
- U.oid AS um,
- S.oid AS srvid,
- S.srvname AS srvname,
- U.umuser AS umuser,
- FALL WENN U.umuser = 0 THEN
- 'öffentlich'
- SONST
- A.rolname
- END AS username,
- CASE WHEN (U.umuser 0 UND A.rolname = current_user
- UND (pg_has_role (s.srvowner, 'USAGE')
- ODER has_server_privilege (S.oid, 'USAGE')))
- ODER (U.umuser = 0 UND pg_has_role (s.srvowner, 'USAGE'))
- ODER (SELECT rolsuper FROM pg_authid WHERE rolname = aktueller_Benutzer)
- DANN U.umoptionen
- SONST NULL ENDE AS umoptions
- VON pg_user_mapping U
- LINKE VERBINDUNG pg_authid Ein ON (A.oid = U.umuser) JOIN
- pg_foreign_server S EIN (U.umserver = S.oid);
- Vergessen Sie nicht, die Datenbanken template0 und template1 einzuschließen, oder die Sicherheitslücke besteht weiterhin in Datenbanken, die Sie später erstellen. Um template0 zu beheben, müssen Sie vorübergehend Verbindungen zulassen. In PostgreSQL 9.5 und höher können Sie verwenden
- ALTER DATABASE template0 MIT ALLOW_CONNECTIONS true;
- und dann nach dem Reparieren von template0, rückgängig machen mit
- ALTER DATABASE template0 MIT ALLOW_CONNECTIONS false;
- In früheren Versionen verwenden Sie stattdessen
- UPDATE pg_database SET datallowconn = wahr WHERE datname = 'template0';
- UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
- Abschließend entfernen Sie die Konfigurationseinstellung allow_system_table_mods und starten Sie den postmaster erneut.
- Verbieten Sie leere Passwörter in allen Passwort-basierten Authentifizierungsmethoden (Heikki Linnakangas)
- libpq ignoriert leere Kennwortspezifikationen und überträgt sie nicht an den Server. Wenn das Passwort eines Benutzers auf die leere Zeichenfolge gesetzt wurde, ist es unmöglich, sich mit diesem Passwort über psql oder andere libpq-basierte Clients anzumelden. Ein Administrator könnte daher glauben, dass das Festlegen des Kennworts auf "leer" dem Deaktivieren der Kennwortanmeldung entspricht. Bei einem modifizierten oder nicht-libpq-basierten Client ist jedoch eine Anmeldung möglich, je nachdem, welche Authentifizierungsmethode konfiguriert ist. Insbesondere die gängigste Methode, md5, akzeptierte leere Passwörter. Ändern Sie den Server, um in allen Fällen leere Kennwörter abzulehnen. (CVE-2017-7546)
- Machen Sie lo_put () auf die UPDATE-Berechtigung für das große Zielobjekt (Tom Lane, Michael Paquier) prüfen
- lo_put () sollte sicherlich die gleichen Berechtigungen wie lowrite () haben, aber die Prüfung fehlte, sodass jeder Benutzer die Daten in einem großen Objekt ändern konnte. (CVE-2017-7548)
- Korrigieren Sie die Dokumentation zum Prozess zum Aktualisieren von Standby-Servern mit pg_upgrade (Bruce Momjian)
- Die vorherige Dokumentation wies Benutzer an, den primären Server nach der Ausführung von pg_upgrade, aber vor der Synchronisierung der Standby-Server zu starten / stoppen. Diese Reihenfolge ist unsicher.
- Fixes gleichzeitiges Sperren von Tupel-Update-Ketten (Alvaro Herrera)
- Wenn mehrere Sitzungen gleichzeitig eine Tupel-Update-Kette mit nicht konfligierenden Sperrmodi unter Verwendung eines alten Snapshots sperren und alle erfolgreich sind, war es möglich, dass einige von ihnen aufgrund eines Rennens dennoch fehlschlagen (und zu dem Schluss kommen, dass es keine Live-Tupel-Version gibt) Bedingung. Dies hatte Folgen, wie zum Beispiel das Überprüfen von Fremdschlüsseln, ein Tupel zu sehen, das definitiv existiert, aber gleichzeitig aktualisiert wird.
- Korrigiert potentielle Datenkorruption beim Einfrieren eines Tupels, dessen XMAX ein Multiexakt mit genau einem noch interessanten Element (Teodor Sigaev) ist
- Vermeiden Sie Integer-Überlauf und folgenden Absturz beim Sortieren von mehr als einer Milliarde Tupel im Speicher (Sergey Koposov)
- Versuchen Sie unter Windows, die Erstellung des Prozesses erneut zu versuchen, wenn wir den Adressbereich für unseren gemeinsamen Speicher im neuen Prozess (Tom Lane, Amit Kapila) nicht reservieren können
- Es wird erwartet, dass es zu seltenen Fehlern beim Start von untergeordneten Prozessen kommt, die wahrscheinlich auf Störungen durch Antivirus-Produkte zurückzuführen sind.
- Korrigieren Sie in Windows-Builds (Thomas Munro, Tom Lane) die Verfälschung der Shared Prädicate-lock-Hashtabelle mit geringer Wahrscheinlichkeit
- Vermeiden Sie, sauberes Schließen einer SSL-Verbindung zu protokollieren, als ob es sich um eine Verbindungszurücksetzung handeln würde (Michael Paquier)
- Verhindert das Senden von SSL-Sitzungstickets an Clients (Tom Lane)
- Dieser Fix verhindert erneute Verbindungsfehler mit ticketfähigem clientseitigen SSL-Code.
- Fix-Code zum Einstellen von tcp_keepalives_idle unter Solaris (Tom Lane)
- Korrigiert den Statistik-Collector, um Anfragenachrichten zu berücksichtigen, die unmittelbar nach einem Postmaster-Shutdown und einem sofortigen Neustart (Tom Lane) ausgegeben wurden
- Statistikanfragen, die innerhalb einer halben Sekunde nach dem vorherigen Postmaster-Shutdown ausgeführt wurden, wurden effektiv ignoriert.
- Stellen Sie sicher, dass die Empfangspuffergröße des Statistiksammlers mindestens 100 KB (Tom Lane) beträgt
- Dies reduziert das Risiko von verlorenen Statistikdaten auf älteren Plattformen, deren Standardempfangspuffergröße geringer ist als diese.
- Korrigiert die mögliche Erstellung eines ungültigen WAL-Segments, wenn eine Standby-Datei gerade befördert wird, nachdem ein XLOG_SWITCH WAL-Datensatz (Andres Freund) verarbeitet wurde
- Fix walsender, um sofort zu beenden, wenn der Client das Herunterfahren anfordert (Tom Lane)
- Behebung von SIGHUP- und SIGUSR1-Handling in Walserver-Prozessen (Petr Jelinek, Andres Freund)
- Verhindert von Walsender ausgelöste Panics während der Abschalt-Checkpoints (Andres Freund, Michael Paquier)
- Repariere unnötige langsame Neustarts von Walreceiver-Prozessen aufgrund der Race Condition beim Postmaster (Tom Lane)
- Behebung von Lecks kleiner Subtransaktionen, die bei der logischen Decodierung (Andres Freund) auf die Festplatte ausgelaufen sind
- Dies führte dazu, dass temporäre Dateien zu viel Speicherplatz benötigten.
- Reduzieren Sie die Arbeit, die zum Erstellen von Snapshots während der Erstellung von Slots für logische Decodierung erforderlich ist (Andres Freund, Petr Jelinek)
- Der vorherige Algorithmus war auf einem Server mit vielen offenen Transaktionen unerschwinglich teuer.
- Eine Racebedingung wurde behoben, die die Erstellung von Slots für logische Decodierung (Andres Freund, Petr Jelinek) auf unbestimmte Zeit verzögern konnte.
- Reduzieren Sie den Overhead bei der Verarbeitung von Syscache-Invalidierungsereignissen (Tom Lane)
- Dies ist besonders hilfreich für die logische Decodierung, die häufige Cache-Invalidierungen auslöst.
- Inkorrekte Heuristik entfernen, die in einigen Fällen verwendet wurde, um die Join-Selektivität basierend auf dem Vorhandensein von Fremdschlüsseleinschränkungen (David Rowley) zu schätzen
- In einigen Fällen, in denen eine mehrspaltige Fremdschlüsseleinschränkung existierte, aber nicht genau mit der Join-Struktur einer Abfrage übereinstimmte, verwendete der Planer eine Schätzungsheuristik, die sich als überhaupt nicht gut erwies. Stellen Sie solche Fälle auf die Weise zurück, wie sie vor 9.6 geschätzt wurden.
- Beheben Sie Fälle, in denen ein INSERT oder UPDATE mehr als einem Element einer Spalte vom Typ "Domain-over-Array" (Tom Lane) zugewiesen ist
- Erlaubt die Verwendung von Fensterfunktionen in Unter-SELECTs innerhalb der Argumente einer Aggregatfunktion (Tom Lane)
- Stellen Sie sicher, dass die CHECK OPTIONS-Klausel einer Sicht ordnungsgemäß erzwungen wird, wenn die zugrunde liegende Tabelle eine Fremdtabelle (Etsuro Fujita) ist
- Zuvor wurde das Update möglicherweise vollständig auf den fremden Server übertragen, die Überprüfung der Ansichtsbedingungen wurde jedoch versäumt.
- Verschieben Sie automatisch erzeugte Array-Typen während ALTER ... RENAME (Vik Fearing) aus dem Weg
- Zuvor würden wir einen in Konflikt stehenden automatisch generierten Arraytyp während CREATE umbenennen; Dieser Fix erweitert dieses Verhalten auf Umbenennungsvorgänge.
- Behinde den Changierzeiger in ALTER TABLE, wenn es einen Kommentar zu einer Einschränkung gibt, die zur Tabelle gehört (David Rowley)
- Das erneute Anwenden des Kommentars auf die rekonstruierte Einschränkung kann mit einer seltsamen Fehlermeldung oder sogar einem Absturz fehlschlagen.
- Stellen Sie sicher, dass ALTER USER ... SET alle Syntaxvarianten akzeptiert, die ALTER ROLE ... SET (Peter Eisentraut) vornimmt
- Zulassen, dass die CHECK-Bedingungen einer fremden Tabelle anfänglich NICHT gültig sind (Amit Langote)
- CREATE TABLE löscht automatisch NOT VALID-Spezifizierer für CHECK-Constraints, was darauf hinweist, dass die Tabelle leer sein muss, damit die Constraint sofort validiert werden kann. Aber das ist falsch für CREATE FOREIGN TABLE, wo es keinen Grund zu der Annahme gibt, dass die zugrundeliegende Tabelle leer ist, und selbst wenn es nicht unsere Aufgabe ist, zu entscheiden, dass die Einschränkung als gültig behandelt werden kann. Überspringen Sie diese "Optimierung" für Fremdtabellen.
- Aktualisieren Sie die Abhängigkeitsinformationen ordnungsgemäß, wenn Sie das Argument oder den Rückgabetyp einer Datentyp-E / A-Funktion von opak in den richtigen Typ (Heikki Linnakangas) ändern
- CREATE TYPE aktualisiert E / A-Funktionen, die in diesem lange veralteten Stil deklariert wurden, aber es hat vergessen, eine Abhängigkeit vom Typ aufzuzeichnen, wodurch ein nachfolgender DROP TYPE defekte Funktionsdefinitionen zurücklassen kann.
- Erlaube Parallelität im Abfrageplan, wenn COPY vom Ergebnis einer Abfrage kopiert (Andres Freund)
- Reduzieren Sie die Speicherauslastung, wenn ANALYZE eine tsvector-Spalte (Heikki Linnakangas) verarbeitet
- Korrigieren Sie unnötige Präzisionsverluste und schlampige Rundungen, wenn Sie Geldwerte mit Ganzzahlen oder Gleitkommawerten multiplizieren oder teilen (Tom Lane)
- Verschärfte Prüfungen auf Leerzeichen in Funktionen, die Kennungen analysieren, z. B. regprocedurein () (Tom Lane)
- Abhängig vom vorherrschenden Gebietsschema könnten diese Funktionen Fragmente von Multibyte-Zeichen als Leerzeichen interpretieren.
- Verwenden Sie beim Erstellen von PL / Perl (Ashutosh Sharma, Tom Lane) die relevanten #define-Symbole von Perl.
- Dies vermeidet Probleme mit der Portabilität, die sich in der Regel als "Handshake" -Diskrepanz beim Laden der Bibliothek manifestieren, wenn Sie mit den neuesten Perl-Versionen arbeiten.
- Setzen Sie in libpq den GSS / SASL- und SSPI-Authentifizierungsstatus nach einem fehlgeschlagenen Verbindungsversuch (Michael Paquier) richtig zurück
- Dies hat dazu geführt, dass beim Ausfall von SSL auf Nicht-SSL-Verbindungen ein GSS / SASL-Fehler beim SSL-Versuch immer dazu führt, dass der Nicht-SSL-Versuch fehlschlägt. SSPI ist nicht gescheitert, aber es hat Speicher durchgesickert.
- Reparieren Sie in psql den Fehler, wenn COPY FROM STDIN mit einem Tastatur-EOF-Signal beendet wird und dann ein weiterer COPY FROM STDIN versucht wird (Thomas Munro)
- Dieses Fehlverhalten wurde auf BSD-basierten Plattformen (einschließlich macOS) beobachtet, aber nicht bei den meisten anderen.
- Repariere pg_dump und pg_restore, um REFRESH MATERIALIZED VIEW Befehle zuletzt (Tom Lane) zu senden
- Dies verhindert Fehler beim Sichern / Wiederherstellen, wenn eine materialisierte Ansicht auf Tabellen verweist, die einem anderen Benutzer gehören.
- Verbessern Sie pg_dump / pg_restores Meldung von Fehlerzuständen, die von zlib stammen (Vladimir Kunschikov, Alvaro Herrera)
- Fix pg_dump mit der Option --clean, um Ereignisauslöser wie erwartet (Tom Lane) zu löschen
- Es weist nun auch das Eigentumsrecht für Ereignisauslöser korrekt zu; Zuvor wurden sie wiederhergestellt, da sie dem Superuser gehören, der das Wiederherstellungsskript ausführt.
- Fix pg_dump mit der Option --clean, um nicht fehlzuschlagen, wenn das öffentliche Schema nicht existiert (Stephen Frost)
- Fix pg_dump, um ungültiges SQL für eine leere Operatorklasse (Daniel Gustafsson) nicht auszugeben
- Fix pg_dump Ausgabe auf stdout auf Windows (Kuntal Ghosh)
- Ein komprimierter Klartext-Dump, der in stdout geschrieben wird, enthält fehlerhafte Daten, da der Dateideskriptor nicht in den binären Modus versetzt werden kann.
- Korrigiert pg_get_ruledef (), um die korrekte Ausgabe für die ON SELECT-Regel einer Ansicht zu drucken, deren Spalten umbenannt wurden (Tom Lane)
- In einigen Fällen verwendet pg_dump pg_get_ruledef (), um Sichten auszugeben, so dass dieser Fehler zu Dump / Reload-Fehlern führen kann.
- Fixes Dumping von äußeren Joins mit leeren Constraints, wie das Ergebnis eines NATURAL LEFT JOIN ohne gemeinsame Spalten (Tom Lane)
- Fix dumping von Funktionsausdrücken in der FROM-Klausel in Fällen, in denen der Ausdruck nicht in etwas, das wie ein Funktionsaufruf (Tom Lane) aussieht, zerlegt wird
- Fix pg_basebackup Ausgabe auf stdout unter Windows (Haribabu Kommi)
- Eine in stdout geschriebene Sicherung enthält beschädigte Daten, weil der Dateideskriptor nicht in den binären Modus versetzt wurde.
- Reparieren Sie pg_rewind, um Dateien mit mehr als 2 GB (Kuntal Ghosh, Michael Paquier) richtig zu behandeln
- Normalerweise werden solche Dateien nicht in PostgreSQL-Datenverzeichnissen angezeigt, aber sie können in einigen Fällen vorhanden sein.
- Fix pg_upgrade, um sicherzustellen, dass der endende WAL-Datensatz kein wal_level = minimum (Bruce Momjian) hat
- Diese Bedingung könnte verhindern, dass aktualisierte Standby-Server die Verbindung wiederherstellen.
- Fix pg_xlogdumps Berechnung der WAL-Datensatzlänge (Andres Freund)
- Stellen Sie in postgres_fdw nach den Befehlen ALTER SERVER oder ALTER USER MAPPING (Kyotaro Horiguchi) Verbindungen zu entfernten Servern wieder her
- Dies stellt sicher, dass Optionenänderungen, die sich auf Verbindungsparameter auswirken, sofort angewendet werden.
- Ermöglichen Sie in postgres_fdw das Löschen von Fernsteuerbefehlen (Robert Haas, Rafia Sabih)
- Diese Änderung ermöglicht es uns, in vielen weiteren Fällen schnell auf einen nicht reagierenden Remote-Server zu warten.
- Erhöhen Sie MAX_SYSCACHE_CALLBACKS, um mehr Platz für Erweiterungen (Tom Lane) zu schaffen
- Verwenden Sie immer -fPIC, nicht -fpic, wenn Sie gemeinsam genutzte Bibliotheken mit gcc (Tom Lane) erstellen
- Dies unterstützt größere Erweiterungsbibliotheken auf Plattformen, wo es einen Unterschied macht.
- Behandeln Sie in MSVC-Builds den Fall, in dem sich die openssl-Bibliothek nicht in einem VC-Unterverzeichnis (Andrew Dunstan) befindet
- Fügen Sie in MSVC-Builds den richtigen Include-Pfad für libxml2-Headerdateien (Andrew Dunstan) hinzu
- Dies behebt eine frühere Notwendigkeit, Dinge in normalen Windows-Installationen von libxml2 zu verschieben.
- Erkennen Sie in MSVC-Builds eine Tcl-Bibliothek mit dem Namen tcl86.lib (Noah Misch)
- Bei MSVC-Builds werden die Einstellungen von PROVE_FLAGS in der Befehlszeile von vcregress.pl (Andrew Dunstan) berücksichtigt
Kommentare nicht gefunden