Artikler · Sammenligning
MariaDB eller PostgreSQL til nye projekter
MariaDB og PostgreSQL kan begge bære langt de fleste projekter. Er softwaren bygget til MySQL, så tag MariaDB. Bygger du noget nyt, eller fylder JSON, tidsserier eller geodata meget, så tag PostgreSQL. Det er også den, vi selv bruger.
To databaser med hver sin historie
MariaDB startede i 2009 som en fork af MySQL, efter at Oracle købte Sun, som ejede MySQL. Den er under GPLv2, og software skrevet til MySQL kører typisk uden ændringer.
PostgreSQL kommer fra et forskningsprojekt på Berkeley og har været open source siden 1996. Den udvikles af et fællesskab uden én virksomhed bag, under en BSD-lignende licens.
Hver PostgreSQL-hovedversion får fem års support. MariaDB har en LTS-version om året med fem års sikkerhedsrettelser. Brug en LTS-version på servere i drift.
Funktioner side om side
| MariaDB | PostgreSQL | |
|---|---|---|
| JSON | Lagres som tekst | jsonb lagres binært og kan indekseres direkte |
| Replikering | Asynkron og semi-synkron | Streaming og logisk replikering |
| Multi-master cluster | Galera, indbygget | Ikke indbygget |
| Sharding | Spider storage engine | Citus (udvidelse) |
| Tidsserier | Partitionering, ColumnStore | TimescaleDB (udvidelse) |
| Geodata | Grundlæggende GIS | PostGIS (udvidelse) |
| Vektorer til AI | MariaDB Vector, indbygget | pgvector (udvidelse) |
| Historik på rækker | System-versioned tables | Ikke indbygget |
| MySQL-kompatibel | Ja | Nej |
MariaDB bygger mange funktioner ind i selve serveren. PostgreSQL holder kernen lille og lægger specialfunktioner i udvidelser.
JSON
I MariaDB er JSON tekst, som databasen tjekker er gyldig JSON. Skal et felt have et indeks, laver du en virtuel kolonne:
ALTER TABLE ordrer
ADD status VARCHAR(20) AS (JSON_VALUE(data, '$.status')) VIRTUAL,
ADD INDEX idx_status (status);
I PostgreSQL gemmes jsonb binært, og ét GIN-indeks dækker hele dokumentet. Du behøver ikke vide på forhånd, hvilke felter der bliver søgt på:
CREATE INDEX idx_data ON ordrer USING GIN (data);
SELECT * FROM ordrer WHERE data @> '{"status": "afsendt"}';
Eksemplerne er testet på MariaDB 11.8 og PostgreSQL 17 på Debian 13.
Har du lidt JSON ved siden af almindelige kolonner, er forskellen lille. Er JSON en central del af datamodellen, er PostgreSQL det stærkeste valg.
Cluster og udvidelser
MariaDB har Galera Cluster indbygget, hvor alle servere kan tage imod skrivninger. Det er en reel styrke. PostgreSQL har replikering indbygget, men automatisk failover kræver et ekstra værktøj, fx Patroni eller repmgr.
PostgreSQLs styrke er udvidelserne: TimescaleDB til tidsserier, PostGIS til geodata, pgvector til vektorsøgning og Citus til sharding. De fleste projekter får dog aldrig brug for sharding. En moderne server rummer mere, end mange tror.
Tjek licensen på TimescaleDB. Komprimering findes kun i Community Edition under Tiger Data License. Den er gratis på egne servere, men den er ikke en godkendt open source-licens.
Drift på fem års sigt
Opgraderinger. MariaDB opgraderes på stedet med mariadb-upgrade. PostgreSQL ændrer dataformat ved hver hovedversion, så du bruger pg_upgrade eller dump og restore. Det skal planlægges.
Vedligehold. PostgreSQL rydder op i gamle rækkeversioner med VACUUM. På tabeller med mange opdateringer skal du overvåge og justere det. MariaDB kræver sjældent den slags.
Forbindelser. PostgreSQL starter en proces pr. forbindelse, så ved mange forbindelser sætter du PgBouncer foran. MariaDB bruger tråde.
Backup. Begge har gode værktøjer, fx mariadb-backup og pgBackRest, og begge kan gendanne til et bestemt tidspunkt.
Hvornår vælger du hvad
Vælg MariaDB, hvis softwaren er bygget til MySQL, dit team kender MySQL, eller du vil have multi-master cluster uden ekstra værktøjer.
Vælg PostgreSQL, hvis JSON, tidsserier, geodata eller vektorer er en central del af projektet, eller hvis du bygger fra bunden.
Vores anbefaling
Kræver softwaren MySQL, vælger vi MariaDB. Ellers vælger vi PostgreSQL.
Vi kørte Zabbix på MariaDB i flere år, og det fungerede fint. Så fik Zabbix understøttelse af TimescaleDB, og vi skiftede. Nu komprimerer Zabbix historikdata og sletter gamle data i hele bidder i stedet for række for række. Det sparede os meget diskplads. Siden har PostgreSQL været vores standard.
Vi foretrækker én databaseserver og en skarp backup frem for et cluster. Vi overtog engang et PostgreSQL-cluster med Patroni fra en anden driftspartner. Der skulle ikke meget ustabilitet på netværket til, før noderne kom ud af sync og kæmpede om at blive primær. Det gav nedbrud igen og igen.
Patroni var ikke hele problemet, men et cluster har flere dele, der kan gå galt. Skal en anden server overtage, gør vi det selv. Vi promoverer replikaen, når vi har set, hvad der er sket. Har du krav om oppetid, som én server ikke kan leve op til, er et cluster nødvendigt. Så skal failover testes grundigt.
Detaljerne står i PostgreSQLs dokumentation og MariaDBs dokumentation.
Har du brug for hjælp?
Vi hjælper med at vælge, sætte op og drifte både MariaDB og PostgreSQL. Læs om rådgivning og managed drift, eller skriv til os.