PostgreSQL er meget mere avanceret, når det kommer til SQL-funktioner.
Ting, som MySQL stadig ikke har (og PostgreSQL har):
-
udskydbare begrænsninger
-
tjek begrænsninger(MySQL 8.0.16 tilføjede dem, MariaDB 10.2 har dem) -
fuld ydre joinforbindelse
MySQL bruger lydløst en indre joinforbindelse med nogle syntaksvariationer:
https://rextester.com/ADME43793 -
sideforbindelser
-
regulære udtryk virker ikke med UTF-8(Rettet med MySQL 8.0) -
regulære udtryk understøtter ikke erstatning eller understreng(Introduceret med MySQL 8.0) -
tabelfunktioner (
select * from my_function()
) -
almindelige tabeludtryk(Introduceret med MySQL 8.0) -
rekursive forespørgsler(Introduceret med MySQL 8.0) -
skrivbare CTE'er
-
vinduefunktioner(Introduceret med MySQL 8.0) -
funktionsbaseret indeks
-
delvist indeks
-
INDLÆG yderligere kolonne i et indeks (f.eks. for unikke indekser)
-
statistik med flere kolonner
-
fuldtekstsøgning på transaktionstabeller(MySQL 5.6 understøtter dette) -
GIS-funktioner på transaktionstabeller
-
EXCEPT eller INTERSECT-operatør (MariaDB har dem)
-
du kan ikke bruge en midlertidig tabel to gange i den samme select-sætning
-
du kan ikke bruge den tabel, der ændres (opdater/slet/indsæt) i et undervalg
-
du kan ikke oprette en visning, der bruger en afledt tabel(Muligt siden MySQL 8.0)create view x as select * from (select * from y);
-
læsekonsistens på udsagnsniveau. Nødvendig til f.eks.:
update foo set x = y, y = x
eller
update foo set a = b, a = a + 100
-
transaktionel DDL
-
DDL-udløser
-
ekskluderingsbegrænsninger
-
nøgle/værdilager
-
Indeksering af komplette JSON-dokumenter
-
SQL/JSON-stiudtryk (siden Postgres 12)
-
områdetyper
-
domæner
-
arrays (inklusive indekser på arrays)
-
roller (grupper) til at administrere brugerrettigheder(MariaDB har dem, introduceret med MySQL 8.0) -
parallelle forespørgsler (siden Postgres 9.6 )
-
parallel indeksoprettelse (siden Postgres 11)
-
brugerdefinerede datatyper (inklusive kontrolbegrænsninger)
-
materialiserede synspunkter
-
tilpassede aggregater
-
brugerdefinerede vinduesfunktioner
-
korrekt
boolean
datatype
(at behandle ethvert udtryk, der kan konverteres til et ikke-nul tal, som "sandt" er ikke en ordentlig boolesk type)
Når det kommer til Spatial/GIS-funktioner, er Postgres med PostGIS også meget mere kapabel. Her er en fin sammenligning.
Jeg er ikke sikker på, hvad du kalder "brugervenlighed", men der er adskillige moderne SQL-funktioner, som jeg ikke vil gå glip af (CTE'er, vinduesfunktioner), som ville definere "brugervenlighed" for mig.
Nu er PostgreSQL ikke perfekt, og nok det mest modbydelige kan være, at tune den frygtede VACUUM-proces til en tung skrivedatabase.