PostgreSQL ist viel fortschrittlicher, wenn es um SQL-Funktionen geht.
Dinge, die MySQL immer noch nicht hat (und PostgreSQL hat):
-
aufschiebbare Beschränkungen
-
Einschränkungen prüfen(MySQL 8.0.16 hinzugefügt, MariaDB 10.2 hat sie) -
vollständiger äußerer Join
MySQL verwendet stillschweigend einen inneren Join mit einigen Syntaxvariationen:
https://rextester.com/ADME43793 -
seitliche Verbindungen
-
reguläre Ausdrücke funktionieren nicht mit UTF-8(Behoben mit MySQL 8.0) -
reguläre Ausdrücke unterstützen keine Ersetzungen oder Teilzeichenfolgen(Eingeführt mit MySQL 8.0) -
Tabellenfunktionen (
select * from my_function()
) -
allgemeine Tabellenausdrücke(Eingeführt mit MySQL 8.0) -
rekursive Abfragen(Eingeführt mit MySQL 8.0) -
beschreibbare CTEs
-
Fensterfunktionen(Eingeführt mit MySQL 8.0) -
funktionsbasierter Index
-
Teilindex
-
INCLUDE zusätzliche Spalte in einem Index (z. B. für eindeutige Indizes)
-
mehrspaltige Statistiken
-
Volltextsuche in Transaktionstabellen(MySQL 5.6 unterstützt dies) -
GIS-Features in Transaktionstabellen
-
EXCEPT- oder INTERSECT-Operator (MariaDB hat sie)
-
Sie können eine temporäre Tabelle nicht zweimal in derselben SELECT-Anweisung verwenden
-
Sie können die zu ändernde Tabelle (aktualisieren/löschen/einfügen) nicht in einer Unterauswahl verwenden
-
Sie können keine Ansicht erstellen, die eine abgeleitete Tabelle verwendet(Möglich seit MySQL 8.0)create view x as select * from (select * from y);
-
Lesekonsistenz auf Anweisungsebene. Benötigt für z. B.:
update foo set x = y, y = x
oder
update foo set a = b, a = a + 100
-
Transaktions-DDL
-
DDL-Trigger
-
Ausschlussbeschränkungen
-
Schlüssel/Wert-Speicher
-
Vollständige JSON-Dokumente indexieren
-
SQL/JSON-Pfadausdrücke (seit Postgres 12)
-
Bereichstypen
-
Domänen
-
Arrays (einschließlich Indizes auf Arrays)
-
Rollen (Gruppen) zum Verwalten von Benutzerrechten(MariaDB hat sie, eingeführt mit MySQL 8.0) -
parallele Abfragen (seit Postgres 9.6 )
-
parallele Indexerstellung (seit Postgres 11)
-
benutzerdefinierte Datentypen (einschließlich Check Constraints)
-
materialisierte Aufrufe
-
benutzerdefinierte Aggregate
-
benutzerdefinierte Fensterfunktionen
-
richtiger
boolean
Datentyp
(Jeden Ausdruck, der in eine Zahl ungleich Null umgewandelt werden kann, als "wahr" zu behandeln, ist nicht ein richtiger boolescher Typ)
Wenn es um räumliche/GIS-Funktionen geht, ist Postgres mit PostGIS ebenfalls viel leistungsfähiger. Hier ist ein schöner Vergleich.
Ich bin mir nicht sicher, was Sie "Benutzerfreundlichkeit" nennen, aber es gibt mehrere moderne SQL-Funktionen, die ich nicht missen möchte (CTEs, Windowing-Funktionen), die für mich "Benutzerfreundlichkeit" definieren würden.
Nun, PostgreSQL ist nicht perfekt und wahrscheinlich das Anstößigste, was es sein kann, den gefürchteten VACUUM-Prozess für eine Datenbank mit vielen Schreibvorgängen zu tunen.