MySQL vs Postgres mal ganz ohne Technik
in MySQL | Tags: Benutzer, MySQL, Navigation, Postgresql, Rechte, SQL, VergleichWenn man den ganzen Kladderadatsch von Performance und Features weglässt, so gibt es immer noch einen ganz gewaltigen Punkt für die Beurteilung einer Datenbank: Wie sie sich dem Benutzer gegenüber präsentiert. Und dies möchte ich heute ganz ohne Ausschweifungen zusammenfassen.
Die Installation
Fangen wir mal mit der Installation an. Unter Linux gibt es in jeder Distribution die bequeme Art des Paketmanagers. Unter Windows gibts Install-Programme (bei Postgresql ab Version 8). Wer Binaries vertraut, hat so oder so ziemlich schnell die Datenbank-Umgebung installiert. Insofern gibts hier nix zu beanstanden, alles sehr einfach.
Wer selbst kompilieren will, um auf dem neuesten Stand zu sein, sollte natürlich die üblichen Verdächtigen configure und make benutzen können. Aber wer will das schon? Das lassen wir der Einfachheit halber ganz schnelle beiseite. 😉
Aller Anfang ist schwer
Ist die Datenbank installiert, so will man diese natürlich gleich ausprobieren. Wie macht man denn das überhaupt? Am schnellsten geht das über stets mitgelieferte Kommandozeilen-Programm. Bei Postgres heißt das psql, bei MySQL einfach mysql.
1 2 3 4 5 6 7 8 9 10 | postgres@lx:/$ psql Dies ist psql 8.3.3, das interaktive PostgreSQL-Terminal. Geben Sie ein: \copyright für Urheberrechtsinformationen \h für Hilfe über SQL-Anweisungen \? für Hilfe über interne Anweisungen \g oder Semikolon, um eine Anfrage auszuführen \q um zu beenden postgres=# |
postgres@lx:/$ psql Dies ist psql 8.3.3, das interaktive PostgreSQL-Terminal. Geben Sie ein: \copyright für Urheberrechtsinformationen \h für Hilfe über SQL-Anweisungen \? für Hilfe über interne Anweisungen \g oder Semikolon, um eine Anfrage auszuführen \q um zu beenden postgres=#
oder auch
1 2 3 4 5 6 7 8 9 | lx:/home/nudge# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 41 Server version: 5.0.51a-12 (Debian) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> |
lx:/home/nudge# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 41 Server version: 5.0.51a-12 (Debian) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql>
Der Benutzer
Um sich erfolgreich anzumelden, braucht man einen Nutzernamen, einen Host und eventuell ein Passwort. Dies alles muss vorher in der Datenbank über die Rechtevergabe konfiguriert sein. Postgresql setzt hier ganz stark auf System-Benutzer, MySQL pflegt Nutzer über Tabellen in MySQL selbst. Beides hat Vor- und Nachteile.
Postgresql zum Beispiel ist dadurch recht robust: Man braucht kein zusätzliches Datenbank-Passwort. Und ordentliche Nutzerpflege vorausgesetzt, ist das auch das sicherste. Allerdings sind Datenbanken meist dort installiert, wo Server rauschen und viele Homepage-Hobby-Admins auf einer Maschine arbeiten. Nicht jeder braucht dabei einen System-Account. Da ist MySQL besser aufgestellt: Nutzer und Rechte können im System ganz einfach gepflegt werden. Postgresql muss neu konfiguriert werden, wenn ein Nutzer hinzukommt.
Navigation in der Datenbank
Ist man erst einmal in der Kommandozeile, gibts gleich tausend weitere Fragen: Wo bin ich? Was ist um mich herum? Wie bewege ich mich? Wie komme ich hier heil wieder raus? Wer hilft mir?
Beide Kommandozeilen bieten ihre Hilfe über die Tastenkombination \h an. Sehr praktisch – kein Umdenken. 🙂 Die Ergebnisse unterscheiden sich jedoch gewaltig: Während MySQL eine kurze Übersicht über die Basic-Befehle ausgibt, öffnet Postgresql eine Hilfe-Shell mit vim-ähnlicher Syntax nur für SQL-Befehle. Mit einer solchen Shell kann kein Anfänger zurechtkommen! Hier macht Postgresql ganz schnell klar, für welchen Benutzerkreis es gedacht ist. Nix für NAU’s (Normalster anzunehmender User). Also muss man bei Postgresql externe Dokumentation bemühen. Wobei sich das auch bei MySQL empfiehlt. So fährt man bequemer.
Eine Auflistung aller Datenbanken gibts unter MySQL nach einem beherzten SHOW DATABASES; Postgresql schafft dies mit einem kurzen \l. MySQL kann man mit USE DATABASE; die Datenbank wechseln, bei Postgresql per \c (CONNECT). Die Tabellen einer Datenbank sieht man unter MySQL mit SHOW TABLES; unter Postgresql per \d. Was L mit Datenbanken zu tun hat, ist mir unklar, \d steht für DESCRIBE und erklärt auch einzelne Tabellen mit \d [TABELLENNAME]. Die Kürze der psql-Befehle ist natürlich bei der täglichen Benutzung von Vorteil. Hier wird wieder mal klar: Postgresql richtet sich an fortgeschrittene Nutzer, MySQL ist sehr einfach ausgelegt. Beide Datenbanken können per \q verlassen werden, MySQL zusätzlich über den Alias QUIT.
Tabellen und Datenbanken
Datenbanken werden von beiden DBMS per CREATE DATABASE [DATENBANKNAME] angelegt, per DROP DATABASE [DATENBANKNAME] gelöscht. Postgresql kennt dazu die externen Tools createdb und dropdb. Tabellen legt man analog dazu per CREATE TABLE [TABELLENNAME] an und löscht sie per DROP TABLE [TABELLENNAME]. Erklären kann man sich den Aufbau einer MySQL-Tabelle mit SHOW CREATE TABLE [TABELLENNAME], Postgresql kann dies wie bereits gezeigt per \d [TABELLENNAME].
Achtung: Sehr bekannt ist die Tatsache, dass sich Postgresql mehr an den SQL-Standard hält als MySQL. Doch was bedeutet das jenseits verschachtelter Abfragen und unverständlichem Spaghetti-Code? Zum Beispiel dies: Datenbank und Tabellennamen sind bei Postgresql grundsätzlich in Kleinbuchstaben gehalten. Namen mit Großbuchstaben sind durch Apostrophe einzuschließen. Wer also auf Namen wie ArtikelVarianten oder KalenderOptionen steht, sollte stets ‘ArtikelVarianten’ bzw. ‘KalenderOptionen’ schreiben oder auf eine andere Worttrennung umsteigen, wie den beliebten Unterstrich: kalender_optionen. Davon bin ich leider kein großer Fan, das sieht immer so oll aus… 😐
Was ganz nett ist: Wenn man im MySQL-Client ein Query absetzt, so erhält man neben den Ergebnissen auch eine Anzeige, wie lange diese Anfrage gedauert hat. Hat man bei seiner Datenbank-Konzeption alles richtig gemacht, so sollte nur in wenigen Fällen etwas anderes als “(0,00 sec)” stehen. Der Postgres-Client psql schweigt an dieser Stelle per default. Mit dem Befehl \timing kann man die Zeitmessung aktivieren, erhält dann allerdings nur das Timing, nicht das Ergebnisset, allerdings auf die Mikrosekunde genau.
Das erste Fazit
Insgesamt macht MySQL einen sehr einfachen und leicht erlernbaren Eindruck, während Postgresl mit seinen Kurzbefehlen, seiner ungewohnten Syntax und oft komplizierten Administration Einsteiger eher abschreckt. Für den Power-User hält Postgres jedoch mehr Optionen bereit. Auf einem Level von Hobby-DB-Admins gesehen, sind beide Datenbanken natürlich voll funktionstüchtig und die Qual der Wahl zunächst wohl eher reine Geschmackssache. Wer Postgres mit PHP benutzen möchte, der sollte sich den Performance-Schlucker pg_connect() genauer ansehen – hier geht oft mehr Zeit verloren als beim Query selbst.
Und damit kommen wir auch schon zum Ende. In der nächsten Folge wird es um Datentypen und auch um ganz echte Daten gehen – denn dafür sind die Programme ja schließlich gemacht. Es lohnt sich also auf jeden Fall dranzubleiben!
\l steht für “list” 😉
Danke für den Hinweis, wurde sofort korrigiert. Wenn Dir noch mehr auffällt – immer her damit! 🙂
Hat einen kleinen Tippfehler:
“Bei MySQL heißt das psql, bei MySQL heißt das mysql.”
Könnte verwirren wenn es nicht so klar wäre 🙂