Da es auf dem Markt eine große Auswahl an Datenbanken gibt, können Benutzer oft zwischen PostgreSQL und SQL Server abwägen, um die bessere Option für ihren Anwendungsfall zu finden. Unternehmen, die PostgreSQL für ihre Arbeit nutzen, sollten vielleicht auf eine Datenbank wie Microsoft SQL Server umsteigen, da diese vor allem für verschiedene Data-Warehousing-Lösungen, E-Commerce und andere Geschäftszweige geeignet ist.

In der Vergangenheit war Microsoft SQL Server ein Favorit für Unternehmen, die auf andere Microsoft-Produkte angewiesen sind, aber PostgreSQL hat sich schnell an die Spitze der Nische gesetzt, nicht nur wegen der Vorteile der Open-Source-Technologie, sondern auch wegen seiner aktiven Nutzergemeinschaft und praktischen Funktionen.

Das ist der Grund, warum wir diese Diskussion führen. Der Vergleich von PostgreSQL und SQL Server wird dir helfen, die möglichen Vorteile und Nachteile der beiden Systeme besser zu verstehen und herauszufinden, welches System für deine Zwecke besser geeignet ist.

Lass uns loslegen!

Was ist PostgreSQL?

Das PostgreSQL-Logo, das den Text unter einem stilisierten blauen Elefanten zeigt, der in Schwarz und Weiß umrandet ist.
PostgreSQL-Logo (Bildquelle: Uberconf)

PostgreSQL hat sich als fortschrittliche Open-Source-Datenbank der Unternehmensklasse etabliert, die sowohl JSON (nicht-relationale) als auch SQL (relationale) Abfragen unterstützt. Dieses leistungsstarke und stabile Datenbankmanagementsystem wird seit mehr als dreißig Jahren von der Community aktiv weiterentwickelt, was zu seinem guten Ruf in Bezug auf Integrität, Zuverlässigkeit, Belastbarkeit, Leistung und Korrektheit beigetragen hat.
(cta)
PostgreSQL wird als zentrales Data Warehouse oder Datenspeicher für verschiedene mobile, Web-, Analyse- und Geodatenanwendungen verwendet. PostgreSQL unterstützt seit langem fortschrittliche Datentypen und bietet Leistungsoptimierungen, wie sie bei kommerziellen Datenbanken wie Microsoft SQL Server und Oracle üblich sind.

PostgreSQL ist nicht nur kostenlos und quelloffen, sondern auch sehr erweiterbar. Du kannst zum Beispiel benutzerdefinierte Funktionen erstellen, deine Datentypen definieren und sogar Code in verschiedenen Programmiersprachen schreiben, ohne dass du deine Datenbank neu kompilieren musst!

Geschichte

Hier ist ein kurzer Überblick über die Entwicklung von PostgreSQL im Laufe der Jahre:

  • Ingres wurde erstmals 1977 entwickelt.
  • Michael Stonebraker und seine Mitarbeiter entwickelten Postgres im Jahr 1986.
  • Im Jahr 1990 wurde PostgreSQL um die Unterstützung von PL/ pgSQL und ACID-Konformität erweitert.
  • Die NYCPUG (New York City PostgreSQL User Group) ist seit 2013 Mitglied der PgUS (United States PostgreSQL Association).
  • Im Jahr 2014 läutete die PGconf eine neue Ära für PostgreSQL-Benutzer ein.

Die wichtigsten Funktionen

Werfen wir nun einen Blick auf einige Funktionen von PostgreSQL, die es zu einem unverzichtbaren Werkzeug auf dem Markt machen:

  • Einhaltung von Standards und Zuverlässigkeit: PostgreSQL zeichnet sich durch sein Write-Ahead-Logging als hochgradig fehlertolerante Datenbank aus. PostgreSQL ist außerdem ACID-konform und bietet volle Unterstützung für Views, Fremdschlüssel, Trigger, Joins und Stored Procedures in verschiedenen Sprachen. PostgreSQL unterstützt die meisten SQL:2008 Datentypen, darunter BOOLEAN, NUMERIC, INTEGER, DATE, VARCHAR, TIMESTAMP, INTERVAL und CHAR.
  • Robuste Erweiterungen: PostgreSQL verfügt über robuste Funktionen wie Point-in-Time Recovery, Multi-Version Concurrency (MVCC), Tablespaces, granulare Zugriffskontrollen und Online/Hot Backups. PostgreSQL ist außerdem in der Lage, Groß- und Kleinschreibung, Sortierung und Formatierung zu berücksichtigen. PostgreSQL ist hochgradig skalierbar, sowohl in Bezug auf die Datenmenge, die es verwalten kann, als auch in Bezug auf die Anzahl der gleichzeitigen Benutzer, die es aufnehmen kann.
  • Open-Source-Lizenz: Der PostgreSQL-Quellcode steht unter einer Open-Source-Lizenz zur Verfügung, die dir die Freiheit gibt, ihn nach eigenem Ermessen zu verändern, zu nutzen und zu implementieren, ohne dass dafür Kosten anfallen. Außerdem fallen für PostgreSQL keine Lizenzkosten an, so dass das Risiko einer übermäßigen Verbreitung entfällt. Die PostgreSQL-Gemeinschaft aus Enthusiasten und Mitwirkenden findet regelmäßig Korrekturen und Fehler, was zur allgemeinen Sicherheit des Datenbanksystems beiträgt.

Anwendungsfälle

PostgreSQL ist so vielseitig, dass es in einer Vielzahl von Anwendungsfällen eingesetzt werden kann:

  • Föderierte Hub-Datenbank: Dank der JSON-Unterstützung und der Wrapper für Fremddaten kann PostgreSQL mit anderen Datenspeichern – einschließlich NoSQL-Datentypen – verknüpft werden und als föderierter Knotenpunkt für polyglotte Datenbanksysteme dienen.
  • Universell einsetzbare OLTP-Datenbank: Sowohl große Unternehmen als auch Start-ups nutzen PostgreSQL als Hauptdatenspeicher, um ihre Anwendungen, Produkte und Lösungen im Internet zu unterstützen.
  • Geospatiale Datenbank: PostgreSQL unterstützt geografische Objekte, wenn es mit der PostGIS-Erweiterung verwendet wird. Es kann auch als Geodatenspeicher für geografische Informationssysteme (GIS) und standortbezogene Dienste verwendet werden.
  • LAPP Open-Source Stack: PostgreSQL kann auch dynamische Anwendungen und Webseiten als Teil einer robusten Alternative zum LAMP-Stack ausführen. LAPP steht für Linux, Apache, PostgreSQL, Perl, PHP und Python.

Was ist SQL Server?

Das SQL Server-Logo, das den Text neben einem stilisierten grauen und tiefroten dynamischen Microsoft-Gittersymbol zeigt.
SQL Server-Logo (Bildquelle: Software Engineering Stack Exchange)

SQL Server wurde von Microsoft als relationales Datenbankmanagementsystem entwickelt und kann auf eine lange Geschichte zurückblicken, zweiunddreißig Jahre, um genau zu sein. Microsoft SQL Server gilt als Softwareprodukt mit der Hauptfunktion, Daten abzurufen und zusammenzustellen, die von anderen Softwareanwendungen angefordert werden.

Diese Anwendungen können entweder auf einem anderen Computer in einem Netzwerk oder auf demselben Computer laufen. Microsoft SQL Server wurde im Laufe der Jahre immer wieder aktualisiert und ist heute eines der am besten unterstützten und renommiertesten RDBMS auf dem Markt.

SQL Server verdankt einen großen Teil seiner Popularität seinem Hersteller Microsoft. Als der MS SQL Server noch in den Kinderschuhen steckte, hatte sich Microsoft bereits als Tech-Gigant etabliert.

SQL Server hat es geschafft, sich als Datenbankmanagementsystem mit seiner breiten Palette an Anwendungen und Tools, die die Arbeit mit Daten vereinfachen, einen Namen zu machen. Seine umfassende grafische Benutzeroberfläche (GUI) ermöglicht ein intuitives und einfaches Arbeiten mit der Datenbank und erlaubt es dir, Statistiken für deine Berichte zu erstellen.

Geschichte

Hier ist ein kurzer Überblick über die Entwicklung von Microsoft SQL Server im Laufe der Jahre:

  • Die Entwicklung von SQL Server begann 1988, als Microsoft mit Sybase und Ashton-Tate zusammenarbeitete, um eine Software zur Pflege und Erstellung von Datenbanken zu entwickeln, die dem Markt für Unternehmensdatenbanken von Microsoft neue Impulse geben sollte.
  • SQL Server 1.0 wurde 1989 auf den Markt gebracht. Damals nutzte er die Systemadministratorfunktion (SAF), um Datenbanken zu erstellen. Es gab keine Dokumentation, aber es ermöglichte den Benutzern, SQL-Abfragen auszuführen und Parameter zu setzen. Der erste Codeschnipsel für Microsoft SQL Server stammt aus der Feder von Sybase.
  • Nach und nach wurden neuere Versionen mit mehr Verbesserungen und Funktionen veröffentlicht. SQL Server 2019, auch Aries genannt, ist die neueste Version in einem Pantheon umfassender Versionen und konzentriert sich darauf, die Datenbankfunktionen noch intuitiver zu gestalten. Dazu gehören auch Big-Data-Cluster-Optionen, die es den Nutzern ermöglichen, mit riesigen Datensätzen zu arbeiten.

Die wichtigsten Funktionen

Genug über die Geschichte gesprochen. Werfen wir einen Blick auf ein paar zentrale Funktionen, die SQL Server zu einem so großartigen Fang machen:

  • Robuste Sicherheitsplattform: SQL Server ermöglicht es dir, deine Daten in Bewegung und im Ruhezustand mit integrierten Funktionen für Datenschutz, Datenklassifizierung, Warnmeldungen und Überwachung zu schützen. Mit SQL Server kannst du auf einfache Weise sensible Daten verschlüsseln, umfangreiche Berechnungen mit verschlüsselten Daten durchführen und einen benutzerdefinierten rollenbasierten Datenzugriff mit komplexer Zeilenfilterung ermöglichen.
  • Branchenführende Leistung: SQL Server bietet eine rekordverdächtige Leistung unter Linux und Windows und liegt bei TPC-H Data Warehousing Workloads, TPC-E OLTP Workloads und realen Benchmarks für die Anwendungsleistung stets vorn. Außerdem kannst du die In-Memory-Datenbankfunktionen von SQL Server wie die speicheroptimierte tempdb und die Unterstützung von persistentem Speicher nutzen, um die Leistung deiner geschäftskritischen Workloads zu verbessern.
  • Intelligenz über all deine Daten mit Big Data Clustern: Mit SQL Server kannst du wertvolle Erkenntnisse aus all deinen Daten gewinnen, indem du Daten aus deinem gesamten Datenbestand abfragst – Azure SQL Database, SQL Server, Teradata, MongoDB, Azure Cosmos DB und viele mehr – ohne Daten replizieren oder verschieben zu müssen. Du kannst sogar einen gemeinsamen Data Lake aufbauen, indem du sowohl unstrukturierte als auch strukturierte Daten in SQL Server kombinierst und entweder über Spark oder T-SQL auf die Daten zugreifst.

Anwendungsfälle

Dank seiner Erweiterbarkeit und Leistung kann SQL Server in einer Vielzahl von Anwendungsfällen eingesetzt werden:

  • Replikationsdienste: SQL Server-Replikationsdienste werden von SQL Server genutzt, um Datenbankobjekte zu harmonisieren und zu replizieren, entweder als Teilmenge der vorhandenen Objekte oder in ihrer Gesamtheit. Replikationsdienste folgen einem Subscriber/Publisher-Modell, d.h. die Änderungen werden von einem Datenbankserver (Publisher) ausgesendet und von anderen (Subscribern) abgeholt.
  • Benachrichtigungsdienste: Die Benachrichtigungsdienste wurden ursprünglich als nachträgliches Add-on für SQL Server 2000 veröffentlicht. Es handelt sich um einen Mechanismus zur Erstellung datengesteuerter Änderungen, die dann an die Abonnenten der Benachrichtigungsdienste gesendet werden.
  • Maschinelle Lerndienste: Die maschinellen Lerndienste von SQL Server arbeiten innerhalb der SQL Server-Instanz und ermöglichen Datenanalysen und maschinelles Lernen, ohne dass Daten über das Netzwerk verschoben werden müssen oder der Arbeitsspeicher des Computers ein Hindernis darstellt.
  • Analysedienste: Die SQL Server-Analysedienste (SSAS) bieten Data Mining- und OLAP-Funktionen für SQL Server-Datenbanken. Die OLAP-Engine bietet Unterstützung für die Speichermodi Relational Online Analytical Processing (ROLAP), Multidimensional Online Analytical Processing (MOLAP) und Hybrid Online Analytical Processing (HOLAP) für Daten. Die SQL Server Analysedienste unterstützen auch XML für den Analysestandard als grundlegendes Kommunikationsprotokoll.

PostgreSQL vs. SQL Server: direkter Vergleich

Nachdem wir nun die wichtigsten Aspekte von SQL Server und PostgreSQL kennen, wollen wir uns mit den Unterschieden zwischen den beiden Systemen beschäftigen. Anhand der unten genannten Faktoren kannst du herausfinden, welches Datenbankmanagementsystem am besten zu deinen Bedürfnissen passt.

Verfügbarkeit

PostgreSQL bietet eine große Auswahl an Lösungen, um die Hochverfügbarkeit für die Nutzer zu gewährleisten. Dazu gehören Write-ahead Log Shipping, Shared-Disk Failover, Datenpartitionierung und verschiedene Replikationsmethoden. Tools wie der EDB Postgres Failover Manager sorgen für ein automatisches Failover, um eine hohe Verfügbarkeit zu gewährleisten, indem sie Datenbankausfälle überwachen und erkennen.

Auf der anderen Seite enthält SQL Server verschiedene Hochverfügbarkeitstools wie Log Shipping, Failover-Cluster und Replikation. Die Verfügbarkeitsgruppen von SQL Server, die rund um die Uhr arbeiten, bieten eine automatische Ausfallsicherung, wenn bestimmte Bedingungen erfüllt sind. Dieses Angebot kann jedoch nur in der Enterprise Edition von SQL Server genutzt werden.

Daten- und Tabellenstruktur

PostgreSQL bietet seinen Nutzern zur Vereinfachung die prozedurale Programmiersprache PL/pgSQL. Zu den zusätzlichen Funktionalitäten zu Standard-SQL in PostgreSQL gehören benutzerdefinierte Typen, benutzerdefinierte Module, Erweiterungen, JSON-Unterstützung und zusätzliche Optionen für Trigger und andere Funktionalitäten.

SQL Server verwendet T-SQL, das Ähnlichkeit mit Standard-SQL hat. T-SQL bietet zusätzliche Unterstützung für Daten- und String-Verarbeitung, prozedurale Programmierung und lokale Variablen.

Wenn du besser verstehen willst, wie die Systeme Anfragen zwischenspeichern und verarbeiten, isoliert PostgreSQL Prozesse, indem es sie als separate Betriebssystemprozesse behandelt. Jede Datenbank hat einen eigenen Speicher und führt ihren eigenen Prozess aus. Das macht die Überwachung und Verwaltung sehr einfach, erschwert aber gleichzeitig die Skalierung mehrerer Datenbanken.

SQL Server verwendet einen Pufferpool, der je nach Verarbeitungsbedarf begrenzt oder erhöht werden kann. Im Gegensatz zu PostgreSQL wird die gesamte Arbeit in einem einzigen Pool ausgeführt, ohne mehrere Seiten.

Sowohl PostgreSQL als auch SQL Server unterstützen temporäre Tabellen, da sie die Speicherung von Zwischenergebnissen aus verzweigten komplexen Logiken und komplexen Prozeduren ermöglichen. Temporäre Tabellen können dazu beitragen, die Organisation und die Leistung der Datenbank zu verbessern, indem sie die Zwischenergebnisse vom Wesentlichen trennen.

Defragmentierung

Wenn Entwickler verschiedene Teile einer SQL-Datenbank ändern, finden die Änderungen an verschiedenen Stellen des Systems statt und können schwer zu verfolgen, zu lesen und zu verwalten sein. Deshalb sollte die Wartung auch eine Defragmentierung beinhalten – der Prozess, bei dem die aktualisierte Datenbank durch die Zuweisung von Indizes, die Erstellung neuer Seiten und die Überarbeitung der Struktur zusammengefasst wird. Die Datenbanken können dann den nicht richtig genutzten Speicherplatz freigeben, so dass eine Datenbank schneller laufen kann.

PostgreSQL durchsucht die Tabellen einer Datenschicht nach leeren Zeilen und beseitigt unnötige Elemente. Auf diese Weise gibt das System den Speicherplatz frei. Diese Methode benötigt jedoch viel CPU und kann die Leistung der Anwendung beeinträchtigen.

SQL Server hingegen bietet einen effizienten Garbage Collector, der nicht mehr als 15-20% Overhead verursacht. Technisch gesehen können Entwickler den Garbage Collector auch kontinuierlich laufen lassen, weil er so effektiv ist. Zusammenfassend lässt sich sagen, dass SQL Server mehr Defragmentierungsmethoden bietet als PostgreSQL.

Indizes

Die Art und Weise, wie eine Datenbank mit Indizes umgeht, ist ein Beweis für ihre Benutzerfreundlichkeit, denn Indizes werden verwendet, um Daten zu finden, ohne nach einer bestimmten Zeile zu suchen. Du kannst Indizes auch verwenden, um auf mehrere Spalten oder Zeilen zu verweisen. Du kannst Dateien denselben Index zuweisen, sie an verschiedenen Stellen in der Datenbank präsentieren und alle diese Teile mit einer einzigen Suche erfassen.

PostgreSQL unterstützt die indexbasierte Tabellenorganisation, aber die frühen Versionen nutzten keine automatischen Index-Updates. Außerdem kannst du mit einer einzigen Suche viele Indizes nachschlagen, was bedeutet, dass du eine Menge Informationen entdecken kannst.

SQL Server bietet umfangreiche automatische Funktionen für die Indexverwaltung. Sie können in Clustern organisiert werden und erhalten die richtige Zeilenreihenfolge, ohne dass du manuell eingreifen musst. SQL Server unterstützt auch partielle Indizes und die Suche nach mehreren Indizes.

Funktionen

PostgreSQL bietet im Gegensatz zu anderen SQL-Datenbanken keinen integrierten Job Scheduler. Für sich wiederholende Aufgaben sind externe Tools wie cron, pgAgent oder pg_cron unter Linux und SQLBackupAndFTP oder Task Scheduler unter Windows erforderlich.

Aufgaben in SQL Server können dagegen einfach über das SQL Server Management Studio geplant werden.

PostgreSQL verfügt über eine gut entwickelte Multiversions-Gleichzeitigkeitskontrolle (MVCC), mit der mehrere Prozeduren gleichzeitig bearbeitet werden können. MVCC bietet Snapshots von Datenbankinformationen, um die Anzeige von Inkonsistenzen zu vermeiden, die durch gleichzeitige Transaktionen oder das Sperren von Daten verursacht werden, die in anderen Datenbanksystemen stattfinden. PostgreSQL nutzt Serializable Snapshot Isolation (SSI), um die Isolierung von Transaktionen zu gewährleisten.

SQL Server hat ein weniger ausgereiftes System zur Steuerung der Gleichzeitigkeit von Transaktionen und ist standardmäßig auf das Sperren von Daten angewiesen, um Fehler durch gleichzeitige Transaktionen zu vermeiden. SQL Server bietet außerdem eine optimistische Gleichzeitigkeitsfunktion, die davon ausgeht, dass solche Probleme selten auftreten. Anstatt eine Zeile zu sperren, wird sie mit einer zwischengespeicherten Version abgeglichen, um festzustellen, ob eine Änderung stattgefunden hat.

Partitionierung und Sharding

Wenn Leistungssteigerungen für größere Datenbanken unverzichtbar sind und du deine gespeicherten Prozeduren ausgereizt hast und deine Hardware aufgerüstet wurde, musst du die Arbeit auf verschiedene Server verteilen. An dieser Stelle kommen Partitionierung und Sharding ins Spiel.

Sowohl beim Sharding als auch bei der Partitionierung geht es im Wesentlichen darum, einen großen Datenbestand in kleinere Teilmengen aufzuteilen, aber beim Sharding werden die Daten auf mehrere Computer verteilt, während das bei der Partitionierung nicht der Fall ist.

Seit Version 10.0 unterstützt PostgreSQL die deklarative Partitionierung – die Partitionierung nach Bereich, Liste oder Hash.

MS SQL Server unterstützt die horizontale Partitionierung – die Aufteilung einer Tabelle mit vielen Zeilen in mehrere Tabellen mit weniger Zeilen.

MS SQL Server unterstützt außerdem Sharding durch Föderation. „Federated Partitioned Views“ sind Ansichten, bei denen die Tabellen auf verschiedene Server verteilt sind, um die Verarbeitungslast auszugleichen.

Um die Datensätze von den Servern abzurufen, benötigst du bestimmte Befehle. Diese Befehle werden „verteilte partitionierte Ansichten“ genannt. Sie verwenden typische SQL-Anweisungen zusammen mit dem Schlüsselwort UNION, um Daten von allen verteilten Servern abzurufen.

Ebenso können DML-Anweisungen (INSERT, UPDATE und DELETE) verwendet werden, wenn bestimmte Regeln für die zugrunde liegenden Tabellen eingehalten werden. Beachte auch, dass föderierte partitionierte Ansichten nur in den Enterprise-Editionen unterstützt werden.

Obwohl partitionierte Verbundansichten in jeder anderen Edition implementiert werden können, da es keine besondere Syntax für sie gibt, werden sie nicht als partitionierte Verbundansichten erkannt. Die Regeln, nach denen die Ansicht als serverübergreifend partitioniert erkannt wird, sind nur in den Enterprise-Editionen verfügbar.

Mit dieser Partitionierungstechnik lässt sich die Leistung in den meisten Anwendungen um 20 bis 30 % steigern. Daher ist es ein sehr nützliches Tool, wenn dein Unternehmen viele Daten verwaltet.

Replikation

Während bei der Partitionierung die Datenbank in kleinere Teilmengen aufgeteilt und die partitionierten Tabellen auf verschiedene Knotenpunkte verteilt werden, wird bei der Replikation die Datenbank auf mehrere Datenbanken kopiert, um einen schnellen Überblick und kürzere Antwortzeiten zu ermöglichen.

PostgreSQL bietet eine Primär-Sekundär-Replikation. Diese kann asynchron oder synchron sein. Write-ahead Logs (WALs) ermöglichen die gemeinsame Nutzung von Änderungen mit den Replikationsknoten und damit eine asynchrone Replikation.

Zu den anderen Arten der Replikation gehören vor allem die logische Replikation, die Streaming-Replikation und die physische Replikation.

  • Die logische Replikation folgt einem Publish-and-Subscribe-Modell. Änderungen basieren auf der Identität der Datenreplikation, z. B. ihrem Primärschlüssel, und nicht auf ihrem physischen Standort.
  • Bei der Streaming-Replikation werden die WALs gestreamt, sobald die Datei erstellt wird. So können Standby-Server schnell aktualisiert werden, anstatt darauf zu warten, dass die Datei gefüllt wird.
  • Schließlich wird die physische Replikation in der Regel mit Dateien und Verzeichnissen implementiert, ohne Rücksicht auf den Inhalt innerhalb des physischen Speichers. PostgreSQL bietet von Haus aus keine Multi-Primär-Replikation, aber sie kann mit Hilfe von Tools anderer Anbieter durchgeführt werden.

Die SQL Server-Replikation dupliziert Daten von einem Publisher-Server zu einem Subscriber. Je nach SQL Server-Edition kann sie asynchron oder asynchron sein. Es gibt drei Arten von Replikationen: Transaktionsreplikation, Snapshot-Replikation und Merge-Replikation.

  • Die transaktionale Replikation wird in der Regel in Server-zu-Server-Umgebungen implementiert, in denen Änderungen vom Publisher an den Subscriber übermittelt werden, sobald sie stattfinden.
  • Die Merge-Replikation wird in der Regel für Server-zu-Client-Umgebungen eingesetzt, in denen es zu Konflikten kommen kann oder in denen Daten entweder auf dem Subscriber oder dem Publisher geändert und nachverfolgt und anschließend synchronisiert werden können.
  • Die Snapshot-Replikation wird eingesetzt, wenn Daten nur selten aktualisiert werden, nicht inkrementell geändert werden müssen oder wenn Daten genau so dupliziert werden, wie sie zu einem bestimmten Zeitpunkt vorliegen. Außerdem bietet die Enterprise Edition die Peer-to-Peer-Replikation als Alternative zur Multi-Primärknoten-Replikation.

Sprache und Syntax

PostgreSQL ist in der Sprache C geschrieben, während MS SQL in C und C++ geschrieben ist. Was die Sprachbindung angeht, so ist PostgreSQL dank seiner externen API libpq, die sehr gut konzipiert und dokumentiert ist, sehr einfach zu verwenden und zu verbinden.

Die externen Sprachbindungen von SQL Server können jedoch von verschiedenen anderen Faktoren abhängen. Möglicherweise musst du zusätzliche Treiber installieren oder Klassen erstellen, um die abgefragten Daten zu speichern; du musst also wissen, wie die Daten zur Kompilierzeit aussehen. Wahrscheinlich müsstest du die Dokumentation zu Rate ziehen, und es könnte ziemlich zeitaufwändig sein, dem nachzugehen.

Wenn es um prozedurale Sprachfunktionen geht, bieten sowohl PostgreSQL als auch SQL Server eine solide Unterstützung. PostgreSQL unterstützt den Datentyp JSON und die Benutzer können Python, Java, PHP, Perl und R problemlos mit SQL verwenden, da sie von der prozeduralen Sprachfunktion unterstützt werden.

SQL Server bietet zwar Unterstützung, aber diese Funktion muss noch verbessert werden, denn es treten leichte Fehler auf, und die Implementierung kann einige Zeit dauern, da sie langsam ist. Der Benutzer muss den Code zunächst in eine .dll-Datei kompilieren.

In PostgreSQL ist es nicht nötig, zuerst eine .dll-Datei zu erstellen. PostgreSQL bietet außerdem eine große Anzahl von regulären Ausdrücken (regex) als Grundlage für die analytische Arbeit.

MS SQL Server hat vergleichsweise weniger Regex und unterstützt bestimmte Befehle wie Substring und Pattern Index, die möglicherweise nicht so gut sind wie PostgreSQL.

Leistung

Wenn es um die Leistung geht, übertrumpft PostgreSQL SQL Server in mehrfacher Hinsicht. Wir haben die Partitionierung angesprochen, und obwohl sowohl PostgreSQL als auch SQL Server Partitionierung anbieten, ist sie bei PostgreSQL kostenlos und effizienter.

PostgreSQL bietet auch eine bessere Gleichzeitigkeit, was eine wichtige Funktion ist, wenn mehrere Prozesse gleichzeitig auf gemeinsame Daten zugreifen und diese ändern können. Die MVCC-Eigenschaft von PostgreSQL sorgt für ein geringeres Risiko von Deadlocks, da sie nur blockiert, wenn zwei Abfragen versuchen, dieselbe Zeile gleichzeitig zu ändern und die Aktualisierungen dieser Zeile zu serialisieren.

Die MVCC-Sperre, die für die Abfrage von Daten erworben wird, kollidiert nicht mit den Sperren, die für das Schreiben von Daten erworben werden. Das minimiert Sperrkonflikte und sorgt für eine bessere Leistung in Mehrbenutzerumgebungen.

Andererseits ist die Gleichzeitigkeit von Prozessen in SQL Server unterentwickelt, und einige Prozesse könnten sogar in eine Sackgasse geraten. Im Gegensatz zur MVCC-Funktion wird bei jeder Aktualisierung einer Zeile eine neue Version der Zeile erstellt, anstatt dieselbe Zeile zu überschreiben, und beide werden beibehalten. Nach und nach werden die älteren Versionen in eine Systemdatenbank namens tempdb verschoben. Die Gleichzeitigkeit der Daten ist jedoch noch lange nicht erreicht.

PostgreSQL bietet außerdem Indexierungsunterstützung für verschiedene Erweiterungen, die die Leistung der Datenbank steigern.

Auf der anderen Seite müssen die SQL-Server ihre Indexierungsimplementierung noch verbessern und Arrays – einen der am häufigsten verwendeten Variablentypen – einbeziehen.

Preisgestaltung

PostgreSQL wurde unter der PostgreSQL-Lizenz veröffentlicht, einer liberalen Open-Source-Lizenz. Die PostgreSQL Global Development Group setzt sich weiterhin dafür ein, PostgreSQL als freie und quelloffene Software zur Verfügung zu stellen. Es gibt keine Pläne, PostgreSQL zu ändern oder unter einer anderen Lizenz zu veröffentlichen.

MS SQL Server wurde unter einer kommerziellen Lizenz als Teil der Microsoft-Produkte veröffentlicht. Anfang 2016 wurde die Datenbank als kostenloses Tool für Entwickler/innen zur Verfügung gestellt, aber sie unterstützt nur einen Prozessor und maximal 1 GB Speicher. Sie ist zwar kostenlos, aber es fehlen ihr einige Funktionen, die du vielleicht für ein Unternehmen brauchst. Wenn du mehr Server benötigst, musst du unter Umständen 899 $ pro Server bezahlen. Die SQL Server Enterprise Edition kostet derzeit $13.748.

Skalierbarkeit

Die Fähigkeit eines Datenbanksystems, auch dann noch gut zu funktionieren, wenn die Datenmenge erhöht wird, um den Bedürfnissen der Nutzer/innen gerecht zu werden, ohne die Leistung zu beeinträchtigen, wird Skalierbarkeit genannt.

PostgreSQL bietet viele Funktionen in Bezug auf die Skalierbarkeit und kann mehrere CPU-Kerne nutzen, um Abfragen schnell parallel zu implementieren.

SQL Server kann ebenfalls Kerne nutzen, allerdings ist die Standardversion auf vierundzwanzig CPU-Kerne beschränkt. Die Enterprise-Version ermöglicht die Nutzung unbegrenzter CPU-Kerne. SQL Server verfügt außerdem über eine Hyper-Scale-Funktion, mit der du die untere und obere Grenze festlegen kannst, um je nach Bedarf nach unten oder oben zu skalieren.

Sicherheit

Mit der Zunahme von Datendiebstahl, Hackerangriffen und Piraterie wird die Sicherheit zu einer der wichtigsten Anforderungen an Datenbanksysteme. Sowohl SQL Server als auch PostgreSQL bieten jedoch eine hervorragende Datenverschlüsselung und Authentifizierung.

Authentifizierungsmethoden

Auf der Serverseite bietet PostgreSQL fortschrittliche Authentifizierungsmethoden wie das Lightweight Directory Access Protocol (LDAP) und das Pluggable Authentication Module (PAM), die die Angriffsfläche der PostgreSQL-Datenbankserver potenziell verringern. Zu den weiteren Sicherheitsverbesserungen auf Serverebene gehören die PostgreSQL-Server-Listen-Adresse, die hostbasierte Authentifizierung und die Zertifikatsauthentifizierung.

In MS SQL Server gibt es zwei Funktionen zur Verbesserung der Sicherheit auf Serverebene: Den Windows-Authentifizierungsmodus und den gemischten Modus, der einen Authentifizierungsprozess sowohl durch Windows Server als auch durch MS SQL Server beinhaltet. Das Sicherheitsmodell von MS SQL Server ist eine enge Integration zwischen dem Windows-Authentifizierungsmodus von Windows Server und der Datenbank.

Datenverschlüsselung

PostgreSQL bietet Datenverschlüsselung und ermöglicht die Verwendung von SSL-Zertifikaten (Secure Sockets Layer), wenn deine Daten über das Internet oder öffentliche Netzwerke übertragen werden. Außerdem kannst du optional Tools zur Authentifizierung von Client-Zertifikaten implementieren. Außerdem kannst du kryptografische Funktionen verwenden, um verschlüsselte Daten in PostgreSQL zu speichern, die sowohl symmetrische Schlüssel als auch Public-Key-Verschlüsselungen unterstützen.

In MS SQL Server sind die verfügbaren Datenverschlüsselungsfunktionen transparente Datenverschlüsselung (TDE), immer verschlüsselt und Verschlüsselung auf Spaltenebene. TDE verwendet den AES-Algorithmus (Advanced Encryption Standard) zur Verschlüsselung von physischen Dateien, zu denen sowohl Daten als auch Protokolldateien gehören. Mit der Funktion „Immer verschlüsselt“ kannst du bestimmte Spalten in beiden Zuständen verschlüsseln, also im Ruhezustand oder in Bewegung (d.h. die Daten bleiben auch im Speicher verschlüsselt).

Privilegien auf Benutzerebene

Außerdem kannst du sowohl in PostgreSQL als auch in SQL Server verschiedene Benutzer mit ihren Berechtigungen (Lesen, Schreiben) verwalten.

PostgreSQL bietet Privilegien auf Benutzerebene als Rollenzuweisungen, Privilegien auf Tabellenebene über Rollen und Rollenvererbung. Mit der Auditing-Option kannst du die Datenzugriffsaktivitäten von Benutzern und Gruppen in deiner Datenbank überprüfen, was eine zusätzliche Sicherheitsebene darstellt.

SQL Server erreicht dies über Benutzergruppen und Rollen. Ressourcenberechtigungen werden direkt dem Benutzerkonto erteilt, und die Berechtigungen werden von einer übergeordneten Ressource vererbt.

Durch die Überwachung und Prüfung von Aktivitäten in SQL Server kannst du außerdem Gleichzeitigkeitsprobleme, langlaufende Abfragen und regelmäßige Arbeitslastmetriken erkennen.

Speicher

Der Speicherplatz ist einer der Schlüsselfaktoren für die Leistung eines jeden Datenbanksystems. Mit der zunehmenden Rechenleistung der Server und der Unterstützung von großem Speicherplatz wird es für die Datenbanken fast unerlässlich, mehr Speicherkapazitäten im System zu ermöglichen.

PostgreSQL ist eine objekt-relationale Datenbank, während Microsoft SQL Server ein relationales Datenbanksystem ist. Das bedeutet, dass PostgreSQL komplexere Datentypen bietet und die Vererbung von Objekten ermöglicht, was die Arbeit mit PostgreSQL allerdings auch komplexer macht. Es verfügt über eine einzige ACID-konforme Speicher-Engine und initialisiert für jede Client-Verbindung einen neuen Systemprozess mit seiner Speicherzuweisung. Je mehr Client-Verbindungen auf den Systemen bestehen, desto mehr Speicher muss zugewiesen werden.

SQL Server 2016 und höher kann maximal hundert Computer oder virtuelle Maschinen mit maximal fünf Instanzen pro Computer verwenden. Aber auch das hängt von der jeweiligen Edition ab. Die Enterprise-Edition ermöglicht eine maximale Bandbreite, sodass mehr Speicherplatz zur Verfügung gestellt werden kann. Während die aktuelle Standard-Edition die Nutzung von bis zu 128 GB Speicher erlaubt, kannst du in der Enterprise-Version unbegrenzt viel Speicher nutzen.

Unterstützung & Gemeinschaft

PostgreSQL veröffentlicht regelmäßig aktualisierte Versionen, die kostenlos sind. Kürzlich hat die PostgreSQL Global Development Group ein Update für alle unterstützten Versionen des Datenbanksystems veröffentlicht und damit über 55 Fehler behoben, die in den letzten drei Monaten gemeldet wurden. PostgreSQL verfügt über eine große Gemeinschaft von Entwicklern, Drittanbietern und Enthusiasten, die Unterstützung leisten und auch versuchen, das System weiterzuentwickeln, indem sie die gemeldeten Fehler beheben.

SQL Server bringt alle paar Jahre eine neue Version heraus. Die Kosten für den Support hängen von den Bedingungen der Lizenz ab. Microsoft SQL Server hat auch eine Support-Community, in der Datenbankanalysten, Entwickler, Systemadministratoren und alle, die sich für die Plattform interessieren, Fragen stellen können. Außerdem können sie in Podcasts und Webcasts wie dem SQL Server Radio mit Guy Glantser und Eitan Blumin mehr über den SQL Server erfahren.

Sowohl PostgreSQL als auch SQL Server können mit Plugins ausgestattet werden. Die Preise und die Kompatibilität hängen vom jeweiligen Plugin ab. Plugins können hilfreich sein, um deine Datenbank zu verwalten, zu bereinigen, zu sichern und vieles mehr.

Adminer zum Beispiel ist ein Datenverwaltungstool und kann zur Verwaltung von Daten sowohl in PostgreSQL als auch in MS SQL Server eingesetzt werden. Verschiedene andere Datenbank-Plugins können ebenfalls verwendet werden, um die Effizienz deiner Datenbank zu verbessern, und zwar: WP-Optimize, Better Search Replace, WP Database Backup, um nur einige zu nennen. Wenn du ein Upgrade eines Datenbanksystems durchführst, fallen möglicherweise Kosten für die Datenmigration an, aber das ist bei jedem anderen Standard-DBMS normal.

Du siehst ein unerwartetes Verhalten? Die PostgreSQL-Gemeinschaft ist stolz darauf, eine Software zu veröffentlichen, die deine Daten zuverlässig speichert. Wenn du glaubst, dass du einen Fehler entdeckt hast, klicke bitte auf die Schaltfläche unten und folge den Anweisungen, wie du einen Fehler melden kannst.
PostgreSQL Fehlerentdeckungsmeldung (Bildquelle: PostgreSQL)

Trigger & Ereignisse

PostgreSQL hat verschiedene erweiterte Trigger, aus denen du je nach Anwendungsfall wählen kannst. Die unterstützten Trigger-Ereignisse sind AFTER, BEFORE und INSTEAD OF. Sie können für INSERT-, UPDATE- und DELETE-Ereignisse verwendet werden, um Daten zu manipulieren. Wie bereits erwähnt, kann PostgreSQL diese Trigger dynamisch ausführen und muss sie vor der Ausführung nicht in eine .dll-Datei kompilieren. Die oben genannten Funktionen können verwendet werden, um eine komplexe Abfrage auszuführen, wenn der Trigger aufgerufen wird.

SQL Server bietet verschiedene Trigger für unterschiedliche Arten von Datenbankereignissen, nämlich DML-Trigger, DDL-Trigger und Logon-Trigger:

  • DML-Trigger oder Data Manipulation Language-Trigger sind Trigger, die zur Manipulation von Daten verwendet werden, indem sie Datensätze einfügen, aktualisieren oder löschen.
  • DDL-Trigger sind für Data Definition Language (DDL)-Ereignisse, wie das Erstellen, Löschen oder Ändern einer Datenbank.
  • Logon-Trigger werden für Anmeldeereignisse verwendet, z. B. wenn eine Benutzersitzung eingerichtet wird. Diese Trigger werden nach erfolgreicher Authentifizierung und vor dem Aufbau der Benutzersitzung ausgelöst. Sie sind nützlich für die Überprüfung und Kontrolle von Anmeldeaktivitäten.

Views

Views sind im Grunde genommen virtuelle Tabellen, die keine physischen Daten speichern. Sie werden in der Regel aus Sicherheitsgründen verwendet, um den Benutzerzugriff auf Daten einzuschränken. Sowohl PostgreSQL als auch SQL Server unterstützen aktualisierbare Views.

In PostgreSQL werden die Views jedoch nur dann automatisch aktualisiert, wenn die folgenden Voraussetzungen erfüllt sind:

  • In der FROM-Klausel der Abfrage dieses Views sollte ein Abschnitt enthalten sein. Der Abschnitt kann aus einer Tabelle oder einem anderen aktualisierbaren View stammen.
  • In der Auswahlliste sollten keine Fensterfunktionen, Aggregatfunktionen oder Funktionen mit Set-Rückgabe enthalten sein.
  • Die Abfrage darf auf der obersten Ebene nicht die Befehle HAVING, LIMIT, DISTINCT, WITH, INTERSECT, EXCEPT, OFFSET oder LIMIT enthalten.

Kurz gesagt, die mit einfachen Abfragen erstellten Views können aktualisiert werden, während es fast unmöglich ist, die mit komplexen Abfragen erstellten Views zu aktualisieren. Komplexe Views hingegen können mit Hilfe von Regeln aktualisiert werden. PostgreSQL bietet zwar keine Möglichkeit, materialisierte Views auszuführen, aber es gibt ein Modul namens matviews, das beim Wiederaufbau jedes materialisierten View helfen kann.

In SQL Server können Views automatisch aktualisiert werden, und es werden sowohl benutzerdefinierte als auch systemdefinierte Views unterstützt. Außerdem werden zwei Tabellenansichten gleichzeitig aktualisiert, wenn sie unterschiedliche Schlüssel haben und die Aktualisierungsanweisung nicht mehr als eine Tabelle betrifft.

Außerdem kann der Benutzer Trigger verwenden, um komplexe Views zu aktualisieren. SQL Server bietet auch die Möglichkeit, materialisierte Views, auch bekannt als indizierte Views, auszuführen. Im Gegensatz zu materialisierten Views in anderen relationalen Datenbanken werden indizierte Views mit den zugrunde liegenden Daten synchronisiert und somit automatisch aktualisiert.

Defizite von SQL Server und PostgreSQL

Wir haben zwar alle Details zu PostgreSQL und SQL Server besprochen, aber beide haben auch ihre Nachteile.

PostgreSQL ist zwar kostenlos, befindet sich aber nicht im Besitz einer einzigen Organisation. Aus diesem Grund hat es es schwer, in der breiten Masse Fuß zu fassen, obwohl er viele Funktionen hat. PostgreSQL konzentriert sich außerdem mehr auf Kompatibilität als auf Geschwindigkeit. Daher sind Änderungen, die der Verbesserung der Geschwindigkeit dienen, mit mehr Aufwand verbunden.

Auf der anderen Seite wurde SQL Server oft für seine schlechte Benutzeroberfläche kritisiert. Es hat komplexe Funktionen zur Leistungsoptimierung und keine native Unterstützung für die Versionskontrolle. Wenn du es für dein Unternehmen verwendest, kann die Enterprise-Version ein Loch dich tief in deine Tasche greifen lassen. Allein die SQL Server 2019 Enterprise Edition kostet 13.748 US-Dollar – das ist so viel wie dreizehn Zimmer mit Ikea-Möbeln! Außerdem ist die Lizenzierung schwer zu durchschauen und ändert sich ständig.

Wenn dir PostgreSQL und SQL Server nicht zusagen, kannst du für deinen speziellen Anwendungsfall auch MongoDB oder MariaDB ausprobieren.

MongoDB ist ein dokumentenorientiertes, kostenloses, plattformübergreifendes Datenbankprogramm, das JSON-ähnliche Dokumente problemlos verarbeiten kann.

MariaDB hingegen ist ein kommerziell unterstützter Fork von MySQL, dessen pluggable und speziell entwickelte Speicher-Engines Workloads unterstützen, die im Allgemeinen eine Vielzahl verschiedener Datenbanken erfordern.

PostgreSQL vs. SQL Server: Welche Datenbank solltest du wählen?

Sowohl PostgreSQL als auch SQL Server sind weit verbreitete relationale Datenbanken, aber wer hat die Nase vorn? Aus den obigen Vergleichen geht hervor, dass PostgreSQL SQL Server in mehreren Szenarien übertrumpft. Er ist nicht nur quelloffen und kostenlos, sondern verfügt auch über mehrere Funktionen, die im Gegensatz zu Microsoft SQL Server leicht verfügbar sind und automatisch implementiert werden können.

Außerdem verfügt PostgreSQL über ein geeigneteres Gleichzeitigkeitsmanagementsystem. Es kann hervorragend mit Fällen umgehen, in denen mehrere Prozesse gleichzeitig auf gemeinsame Daten zugreifen und diese verändern.

Wenn du ein kleines Unternehmen betreibst, könnte PostgreSQL die richtige Wahl für dich sein, denn es ist kostenlos und bietet viele nützliche Funktionen für die Datenverwaltung. Es ist einfach zu installieren und kann auf fast allen Betriebssystemen eingesetzt werden. Für Unternehmen, die viel in den Microsoft SQL Server Stack investieren, hat SQL Server jedoch Vorteile gegenüber PostgreSQL.

Zusammenfassung

Alles in allem sind sowohl PostgreSQL als auch SQL Server funktionale und vielseitige Datenbanken. Während PostgreSQL für fast alle Betriebssysteme verwendet werden kann und für kleine Unternehmen geeignet ist, die ein Maximum an Funktionalität benötigen, ist SQL Server am besten für große Unternehmen geeignet, vor allem für solche, die den Einsatz von Microsoft-Produkten benötigen.

In diesem Artikel haben wir uns mit den wichtigsten Unterschieden zwischen PostgreSQL und SQL Server und ihren Funktionen beschäftigt. Die „richtige“ Wahl hängt letztendlich davon ab, wie du dein Unternehmen führen willst.

Welche Datenbank, PostgreSQL oder SQL Server, würdest du für dein nächstes Projekt verwenden und warum? Wir würden gerne deine Meinung hören! Teile sie uns im Kommentarbereich mit.

Amit Phaujdar

Freelance content writer by day, binge-watcher by night, with 200+ published articles online to date.