Post­greS­QL und MySQL sind zwei der am weitesten ver­brei­te­ten Open-Source-Datenbank-Ma­nage­ment-Systeme. Wir zeigen Ge­mein­sam­kei­ten und Un­ter­schie­de und erklären, welches der beiden Tools für welche Ein­satz­sze­na­ri­en am besten geeignet ist.

Post­greS­QL vs. MySQL im Überblick

Bei Post­greS­QL und MySQL handelt es sich um Datenbank-Ma­nage­ment-Systeme (DBMS). Für die meisten Pra­xis­an­wen­dun­gen haben die beiden Systeme mehr Ge­mein­sam­kei­ten als Un­ter­schie­de. Dennoch zeigt der Vergleich Post­greS­QL vs. MySQL subtile Be­son­der­hei­ten, die sich in spe­zi­fi­schen Vor- und Nach­tei­len nie­der­schla­gen.

Tipp

Mehr über die beiden Systeme erfahren Sie in unseren aus­führ­li­chen De­tail­ar­ti­keln:

Zunächst nutzen Post­greS­QL und MySQL die Pro­gram­mier­spra­che SQL als zentrale Schnitt­stel­le für die In­ter­ak­ti­on mit Da­ten­ban­ken und den darin ent­hal­te­nen Daten. Am be­kann­tes­ten dürfte die SELECT-Anweisung zum Ausführen von Abfragen (Queries) sein. So lassen sich Daten innerhalb der Datenbank auffinden und ausgeben. Ferner exis­tie­ren viel­fäl­ti­ge SQL-Befehle, die der Steuerung des DBMS dienen.

Der Funk­ti­ons­um­fang von SQL ist in ver­schie­de­nen Normen fest­ge­legt. Die ge­bräuch­li­chen Im­ple­men­ta­tio­nen decken den Standard mehr oder weniger gut ab. Beim Vergleich Post­greS­QL vs. MySQL ist Post­greS­QL mächtiger und un­ter­stützt einen größeren Funk­ti­ons­um­fang als MySQL.

Tipp

Sie sind neu beim Thema SQL? Dann machen Sie sich unsere SQL-Ein­füh­rung mit Bei­spie­len zunutze.

Ein wichtiger Un­ter­schied zwischen Post­greS­QL und MySQL besteht in der grund­le­gen­den Ar­chi­tek­tur. Zunächst sind beide Systeme re­la­tio­na­le Datenbank-Ma­nage­ment-Systeme (RDBMS). Post­greS­QL kann jedoch einiges mehr, denn es handelt sich um ein so­ge­nann­tes ob­jekt­re­la­tio­na­les DBMS (ORDBMS). Wir erklären weiter unten, wie genau sich der Un­ter­schied auswirkt.

Beide DBMS fußen auf einer Storage Engine. Dabei handelt es sich um eine Schnitt­stel­le zur Spei­che­rung der Daten auf phy­si­schen Da­ten­trä­gern. Für den per­for­man­ten Zugriff kommen Indizes zum Einsatz, die auf die einzelnen Da­ten­bank­ein­trä­ge verweisen. Es gibt ver­schie­de­ne Storage Engines und Index-Methoden, mit jeweils eigenen Vor- und Nach­tei­len.

Tipp

Post­greS­QL und MySQL sind Open-Source-Datenbank-Ma­nage­ment-Systeme und stehen damit im Gegensatz zu den pro­prie­tä­ren Produkten großer Anbieter wie Microsoft und IBM. Daneben existiert eine Vielzahl weiterer Open-Source-DBMS. Wir stellen die wich­tigs­ten Open-Source-Da­ten­ban­ken im Vergleich vor.

MySQL – das klas­si­sche Open-Source-RDBMS

MySQL wurde Mitte der 1990er Jahre von der Firma MySQL AB in Schweden ent­wi­ckelt, die 2008 von Sun Mi­cro­sys­tems und 2010 von Oracle über­nom­men wurde. Aufgrund des be­stehen­den Miss­trau­ens der Open-Source-Community gegenüber Oracle kam es zum Fork der Datenbank-Software als „MariaDB“. Somit sollte der Verbleib des Projekts unter einer Open-Source-Lizenz si­cher­ge­stellt werden.

In den Boom­jah­ren des noch neuen World Wide Webs erlangte MySQL als Kom­po­nen­te des all­ge­gen­wär­ti­gen LAMP-Stacks Be­rühmt­heit. So wird die Datenbank-Software neben Linux, Apache und PHP als Teil der meisten Web­hos­ting-Pakete zur Verfügung gestellt. Im Zuge der starken Ver­brei­tung ent­wi­ckel­te sich MySQL zum Standard für Web­pro­jek­te mit da­hin­ter­lie­gen­der re­la­tio­na­ler Datenbank.

Post­greS­QL – die mächtige ob­jekt­re­la­tio­na­le Al­ter­na­ti­ve

Post­greS­QL wurde ur­sprüng­lich unter dem Namen „Postgres“ als Nach­fol­ger des DBMS Ingres kon­zi­piert. Die Ent­wick­lung fand Mitte der 1980er Jahre an der Uni­ver­si­ty of Ca­li­for­nia, Berkeley statt; der Code wurde unter der Lizenz „Berkeley Software Dis­tri­bu­ti­on“ (BSD) ver­öf­fent­licht. Mitte der 1990er Jahre erfolgte der Umstieg auf SQL als ein­heit­li­che Schnitt­stel­le. Damit ein­her­ge­hend kam es zur Na­mens­än­de­rung in „Post­greS­QL“. Bis heute sind beide Namen weiterhin ge­bräuch­lich.

Der Vergleich: Post­greS­QL vs. MySQL

Zunächst er­mög­li­chen sowohl Post­greS­QL als auch MySQL das Arbeiten mit re­la­tio­na­len Da­ten­ban­ken. Beide Systeme verstehen SQL-Befehle zum Erzeugen, Mo­di­fi­zie­ren und Befüllen von Tabellen sowie zum Ausführen von Abfragen. Darüber hinaus zeigt die Be­trach­tung Post­greS­QL vs. MySQL grund­le­gen­de Un­ter­schie­de in der Funk­tio­na­li­tät. Diese Dif­fe­ren­zen ergeben sich aus der ver­schie­den­ar­ti­gen Ar­chi­tek­tur.

Während MySQL ein rein re­la­tio­na­les Datenbank-Ma­nage­ment-System (RDBMS) ist, handelt es sich bei Post­greS­QL um ein ob­jekt­re­la­tio­na­les DBMS (ORDBMS). Somit un­ter­stützt Post­greS­QL eine Reihe von Konzepten, die aus der ob­jekt­ori­en­tier­ten Pro­gram­mie­rung bekannt sind. Dazu zählen nut­zer­de­fi­nier­te Da­ten­ty­pen, zu­sam­men­ge­setz­te Da­ten­ty­pen sowie Vererbung. Post­greS­QL ist mächtiger als MySQL, dabei aber auch komplexer.

DBMS-Ei­gen­schaft Post­greS­QL / ORDBMS MySQL / RDBMS
Mehrere Daten pro Feld Als Arrays un­ter­stützt Erfordert separate Tabelle und Join
m:n-Beziehung Direkt mo­del­lier­bar Erfordert zu­sätz­li­che Tabellen und Join
Vererbung Direkt mo­del­lier­bar Erfordert komplexe Lösung/Views, mehrere Tabellen etc.
Hier­ar­chi­sche Daten Per JSON, HStore und XML Lediglich JSON
Boolesche Werte Eigener Datentyp Im­ple­men­tie­rung als TINYINT(1)

Da­ten­ty­pen

Da­ten­ty­pen stellen die Grundlage für ein solides Da­ten­bank­de­sign und damit für den pro­duk­ti­ven Einsatz der Datenbank dar. Beim Design der Tabellen legt man für einzelne Spalten fest, welche Art von Daten diese enthalten. Folgende Da­ten­ty­pen exis­tie­ren:

Datentyp Post­greS­QL MySQL
Boolesche Werte Post­greS­QL kennt einen eigenen Bool-Datentyp. MySQL geht einen Umweg: Anstatt boolesche Werte als eigenen Datentyp zu im­ple­men­tie­ren, werden Booleans als Zahlen des Typs TINYINT(1) ge­spei­chert.
Ranges Post­greS­QL bietet eine breite Un­ter­stüt­zung für Range-Typen, was die Arbeit mit ordinalen Werten ver­ein­facht. MySQL hat keine Un­ter­stüt­zung für Ranges an Bord; benötigt man diese, muss man sich mit ggf. selbst­ge­bau­ten Al­ter­na­ti­ven behelfen.
Geodaten Post­greS­QL hat die Open-Source-Er­wei­te­rung PostGIS, die als eine der aus­ge­reif­tes­ten GIS-Im­ple­men­ta­tio­nen gilt. MySQL un­ter­stützt seit Version 8 Geodaten und die da­zu­ge­hö­ri­gen Abfragen. Al­ler­dings fällt der Funk­ti­ons­um­fang kleiner aus als bei Post­greS­QL.
Arrays Post­greS­QL un­ter­stützt als ORDBMS Arrays. Mit Post­greS­QL-Arrays lassen sich mehrere Werte in einem Feld speichern. MySQL un­ter­stützt diesen Datentyp nicht.
Hier­ar­chi­sche Daten / JSON Post­greS­QL un­ter­stützt JSON als Datentyp. So lässt sich eine komplexe, hier­ar­chisch ver­schach­tel­te Da­ten­struk­tur in einem einzigen Feld un­ter­brin­gen. MySQL un­ter­stützt ebenfalls JSON als Datentyp, doch ist nicht so mächtig wie Post­greS­QL.

Per­for­mance

Datenbank-Per­for­mance ist ein hoch­kom­ple­xes Thema. Für ge­wöhn­lich bieten ver­schie­de­ne DBMS je nach Ein­satz­sze­na­rio gewisse Vor- und Nachteile. Generell gilt MySQL als aus­ge­spro­chen per­for­mant, vor allem dann, wenn über­wie­gend „read-heavy“, d. h. lesend auf die Datenbank zu­ge­grif­fen wird. Das ist ins­be­son­de­re bei Content-Ma­nage­ment-Systemen wie WordPress der Fall, die haupt­säch­lich Inhalte aus der Datenbank auslesen und an Be­su­che­rin­nen und Besucher aus­lie­fern.

Im Gegensatz zu MySQL liefert Post­greS­QL oft eine bessere Per­for­mance bei „write-heavy“-Ope­ra­tio­nen. Ferner gilt das ORDBMS als besser geeignet für Data-Warehousing-Lösungen und andere Systeme für „Online Ana­ly­ti­cal Pro­ces­sing“ (OLAP). Post­greS­QL un­ter­stützt multiple Ver­bin­dun­gen mit eigenen Prozessen, was jedoch zu höherem Spei­cher­be­darf führt.

Si­cher­heit und Ver­füg­bar­keit

Re­la­tio­na­le DBMS stellen idea­ler­wei­se die Kon­sis­tenz und Ver­füg­bar­keit der ge­spei­cher­ten Daten sicher. Man spricht dabei auch von den „ACID“-Ei­gen­schaf­ten. Post­greS­QL un­ter­stützt die ACID-Ei­gen­schaf­ten voll­stän­dig, bei MySQL ist dies je nach ein­ge­setz­ter Storage Engine mehr oder weniger der Fall.

Ähnlich sieht es aus in Bezug auf die „Mul­ti­ver­si­on Con­cur­ren­cy Control“ (MVCC), die bei gleich­zei­ti­gen Zugriffen auf die Datenbank die Kon­sis­tenz der Daten si­cher­stellt. Bei Post­greS­QL ist MVCC grund­sätz­lich gegeben, bei MySQL hängt dies von der Storage Engine ab. In puncto Si­cher­heit macht MySQL mit TLS-Ver­schlüs­se­lung einen guten Eindruck. Post­greS­QL setzt noch auf den älteren SSL-Standard.

Ad­mi­nis­tra­ti­on

Ein wichtiger Aspekt bei der Arbeit mit DBMS ist die Un­ter­stüt­zung ver­schie­de­ner Admin-Ober­flä­chen. Sowohl Post­greS­QL als auch MySQL verfügen mit psql bzw. mysql über eine Kom­man­do­zei­len-Schnitt­stel­le (Command Line Interface, CLI). Mit Hilfe der CLI-Tools lässt sich eine Ver­bin­dung zur Datenbank her­stel­len und SQL-Code aus direkter Eingabe oder einer Skript-Datei ausführen.

Neben den Kom­man­do­zei­len-Schnitt­stel­len verfügen Post­greS­QL und MySQL über web­ba­sier­te und native grafische Be­nut­zer­ober­flä­chen (Graphical User Interface, GUI). Als weiterer wichtiger Punkt sind die de­di­zier­ten Import- und Export-Tools zu nennen. Diese erlauben das Anlegen und Wie­der­ein­spie­len von Datenbank-Backups. Post­greS­QL hat die Tools pg_dump und pg_restore an Bord und ist in puncto Backup mächtiger als ein MySQL-Backup mit dem MySQL-Dump-Tool.

Admin-Tool Post­greS­QL MySQL
CLI-Client psql mysql
Web-GUI phpP­gAd­min phpMy­Ad­min
Native GUI pgAdmin MySQL Workbench

Für welche Szenarien nutzt man Post­greS­QL vs. MySQL?

Wie wir gesehen haben, fördert der Vergleich Post­greS­QL vs. MySQL tief­grei­fen­de Un­ter­schie­de zu Tage. Welches der beiden Datenbank-Ma­nage­ment-Systeme sollte man nun für das eigene Projekt einsetzen? Glück­li­cher­wei­se fällt die Antwort einfach aus: Der Einsatz von Post­greS­QL ist sinnvoll, wenn es spezielle An­for­de­run­gen an die Datenbank gibt. Ist dies nicht der Fall, genügt in der Regel MySQL.

Anders aus­ge­drückt setzt man auf Post­greS­QL, um die Website einer Bank oder einer kri­ti­schen In­sti­tu­ti­on zu im­ple­men­tie­ren. Hierbei zahlt sich die voll­stän­di­ge ACID-Com­pli­ance aus, und die hohen An­for­de­run­gen an Sta­bi­li­tät und Da­ten­kon­sis­tenz recht­fer­ti­gen die höhere Kom­ple­xi­tät des ORDBMS. Ferner stehen aus­rei­chend Res­sour­cen für eine hoch­per­for­man­te Post­greS­QL-Umgebung zur Verfügung.

Ein weiteres Ein­satz­sze­na­rio für Post­greS­QL liegt dann vor, wenn die Pro­jekt­ar­chi­tek­tur das Verwalten an­spruchs­vol­ler Da­ten­mo­del­le erfordert. Möchte man komplexe Ob­jekt­hier­ar­chien abbilden oder wird Vererbung als zentrale Kom­po­nen­te des Da­ten­mo­dells benötigt, lohnt sich der Einsatz des mächtigen ORDBMS. Ins­be­son­de­re erspart man sich damit ggf. den Einsatz einer ob­jekt­re­la­tio­na­len Abbildung (Object-re­la­tio­nal Mapping, ORM).

Für kleine bis mit­tel­gro­ße Web­pro­jek­te setzt man besser MySQL ein. Das RDBMS ist weniger an­spruchs­voll in Bezug auf Ser­ver­res­sour­cen. Ferner ist es einfacher, einen er­fah­re­nen und be­zahl­ba­ren MySQL-Admin zu finden. Die starke Per­for­mance beim Lesen von Daten aus der Datenbank passt gut für Websites und nicht allzu an­spruchs­vol­le On­line­shops.

Zu guter Letzt merken wir an, dass sich Post­greS­QL und MySQL durchaus im Tandem einsetzen lassen. Ins­be­son­de­re für Data-Warehousing-Lösungen ist dies attraktiv. Für ge­wöhn­lich kommen in einem der­ar­ti­gen Setup eine oder mehrere nach außen ge­rich­te­te MySQL-Instanzen zum Einsatz. Sie sammeln Daten und geben diese weiter an eine da­hin­ter­lie­gen­de, zentrale Post­greS­QL-In­stal­la­ti­on, auf der Aus­wer­tung und Analysen laufen.

Zum Hauptmenü