Med et stort udvalg af databaser at vælge imellem på markedet kan brugerne ofte overveje PostgreSQL vs. SQL Server for at finde ud af, hvilken løsning der er bedst for deres brugssituation. Organisationer, der anvender PostgreSQL til deres drift, vil måske ønske at skifte til en database som Microsoft SQL Server, da den primært henvender sig til forskellige datawarehousing-løsninger, e-handel og andre forretningsområder.

Historisk set har Microsoft SQL Server været en favorit for organisationer, der er afhængige af andre Microsoft-produkter, men PostgreSQL har gjort hurtige fremskridt og er steget til toppen af nichen, ikke kun på grund af fordelene ved at være open source, men også på grund af dens aktive fællesskab af brugere og praktiske funktioner.

Det er dette, der bringer os til denne diskussion. En sammenligning af PostgreSQL og SQL Server vil hjælpe dig til bedre at forstå de mulige fordele og kompromiser ved de to systemer, og hvilket af dem der er bedst egnet til dit formål.

Lad os gå i dybden!

Hvad er PostgreSQL?

PostgreSQL-logoet, der viser teksten under et stiliseret blåt elefanthoved, der er skitseret i sort og hvid.
PostgreSQL logo (Billedekilde: Uberconf)

PostgreSQL har etableret sig som en avanceret open source-database i virksomhedsklasse, der understøtter både JSON (ikke-relationel) og SQL (relationel) forespørgsler. Dette kraftfulde og stabile databaseadministrationssystem er blevet bakket op af over tredive års aktiv udvikling i fællesskabet, som har bidraget til dets ry for integritet, pålidelighed, robusthed, ydeevne og korrekthed.

PostgreSQL bruges som det vigtigste datalager eller datalager til forskellige mobile, web-, analyse- og geospatiale applikationer. PostgreSQL kan også prale af en rig historie med understøttelse af avancerede datatyper sammen med optimering af ydeevnen, der almindeligvis findes på tværs af de kommercielle databasekolleger, som Microsoft SQL Server og Oracle.

Ud over at være gratis og open source er PostgreSQL også meget udvidelsesvenlig. Du kan f.eks. generere brugerdefinerede funktioner, definere dine datatyper og endda skrive kode fra forskellige programmeringssprog uden at skulle omkompilere din database!

Historie

Her er en kort oversigt over PostgreSQL gennem årene:

  • Ingres blev udviklet første gang i 1977.
  • Michael Stonebraker og hans medarbejdere udviklede Postgres i 1986.
  • I 1990 blev PostgreSQL udvidet med understøttelse af PL/ pgSQL og ACID-overholdelse.
  • NYCPUG (New York City PostgreSQL User Group) blev medlem af PgUS (United States PostgreSQL Association) tilbage i 2013.
  • I 2014 indvarslede PGconf en ny æra for PostgreSQL-brugere.

Hovedfunktioner

Lad os nu gå videre og se på nogle af PostgreSQLs funktioner, der gør det til et uundværligt værktøj på markedet:

  • Overholdelse af standarder og pålidelighed: PostgreSQL’s write-ahead logging gør det muligt for den at skille sig ud som en meget fejltolerant database. PostgreSQL er også ACID-kompatibel og giver fuld understøttelse for views, fremmednøgler, triggers, joins og stored procedures på forskellige sprog. Den omfatter de fleste SQL: 2008-datatyper, herunder BOOLEAN, NUMERIC, INTEGER, DATE, VARCHAR, TIMESTAMP, INTERVAL og CHAR.
  • Robuste udvidelser: PostgreSQL indeholder robuste funktionssæt såsom point-in-time recovery, multi-version concurrency (MVCC), tablespaces, granulær adgangskontrol og online/hot backups. PostgreSQL er også lokalafhængig med hensyn til hensyn til helsætningsfølsomhed, sortering og formatering. Det er meget skalerbart både med hensyn til den mængde data, det kan håndtere, og med hensyn til antallet af samtidige brugere, der kan rummes.
  • Open source-licens: Du kan få adgang til PostgreSQL-kildekoden under en open source-licens, hvilket giver dig frihed til at ændre, bruge og implementere den efter eget ønske og uden beregning. Derudover har PostgreSQL ingen licensomkostninger, hvilket fjerner risikoen for overdreven udbredelse. PostgreSQL’s fællesskab af entusiaster og bidragydere finder regelmæssigt rettelser og fejl, hvilket bidrager til den overordnede sikkerhed i databasesystemet.

Use Cases

PostgreSQL’s alsidighed gør det muligt at udnytte det i en lang række anvendelsestilfælde som f.eks:

  • Federeret hubdatabase: PostgreSQL’s JSON-understøttelse og wrappere til fremmeddata gør det muligt at forbinde den med andre datalagre – herunder NoSQL-datatyper – og fungere som et fødereret hub for polyglotte databasesystemer.
  • OLTP-database til generelle formål: Både store virksomheder og nystartede virksomheder bruger PostgreSQL som det vigtigste datalager til at understøtte deres applikationer, produkter og løsninger i internetskala.
  • Geospatial database: PostgreSQL understøtter geografiske objekter, når den anvendes med PostGIS-udvidelsen. Den kan også bruges som et geospatialt datalager til geografiske informationssystemer (GIS) og lokaliseringsbaserede tjenester.
  • LAPP open source stack: PostgreSQL kan også køre dynamiske apps og websteder som en del af et robust alternativ til LAMP-stakken. LAPP står for Linux, Apache, PostgreSQL, Perl, PHP og Python.

Hvad er SQL Server?

SQL Server-logoet, der viser teksten ved siden af et stiliseret gråt og dybrødt dynamisk gittersymbol fra Microsoft.
SQL Server-logo (Billedekilde: Software Engineering Stack Exchange)

SQL Server blev udviklet af Microsoft som et relationelt databasestyringssystem, der har en lang historie, 32 år for at være præcis. Microsoft SQL Server betragtes som et softwareprodukt med den primære funktion at hente og samle data som krævet af andre softwareapplikationer.

Disse programmer kan enten køre på en anden computer på tværs af et netværk eller på den samme computer. Microsoft SQL Server har oplevet mange opdateringer i årenes løb og er blevet et af de bedst understøttede og mest anerkendte RDBMS’er på markedet i dag.

SQL Server skylder en stor del af sin popularitet til producenten, Microsoft. Da MS SQL Server var i sin vorden, havde Microsoft allerede etableret sig som en teknologisk gigant.

SQL Server har formået at gøre sig bemærket som et databaseadministrationssystem med sin brede vifte af applikationer og værktøjer, der forenkler arbejdet med data. Den omfattende grafiske brugergrænseflade (GUI) gør det muligt at arbejde intuitivt og nemt med databasen og giver dig samtidig mulighed for at generere statistikker til dine rapporter.

Historie

Her er en kort oversigt over Microsoft SQL Server gennem årene:

  • Udviklingen af SQL Server begyndte i 1988, da Microsoft samarbejdede med Sybase og Ashton-Tate om at udvikle software til vedligeholdelse og oprettelse af databaser, der skulle give Microsofts marked for erhvervsdatabaser et skub fremad.
  • SQL Server 1.0 blev udrullet i 1989. Dengang benyttede den systemadministratorfaciliteten (SAF) til at generere databaser. Den havde ingen dokumentation, men den gav alligevel brugerne mulighed for at køre SQL-forespørgsler og indstille parametre. Det første kodestykke til Microsoft SQL Server blev skrevet af Sybase.
  • Efterhånden blev der frigivet nyere versioner med flere forbedringer og funktioner. SQL Server 2019, eller Aries, er den seneste tilføjelse til et pantheon af omfattende versioner, da den fokuserer på at gøre databasefunktionerne endnu mere intuitive at bruge. Dette omfatter big data cluster-muligheder, hvilket giver brugerne mulighed for at arbejde med gigantiske datasæt.

Hovedfunktioner

Nok historiesnak. Lad os se på et par centrale funktioner, der gør SQL Server til en fantastisk fangst:

  • Robust sikkerhedsplatform: SQL Server giver dig mulighed for at beskytte dine data i bevægelse og i hvile med indbyggede funktioner til databeskyttelse, dataklassificering, advarsler og overvågning. Med SQL Server kan du nemt kryptere følsomme data og udføre omfattende beregninger på krypterede data, og du kan tillade tilpasset rollebaseret dataadgang komplet med kompleks rækkefiltrering.
  • Branchens førende ydeevne: SQL Server kan prale af rekordhøj ydeevne på Linux og Windows, da den konsekvent er førende på tværs af TPC-H data warehousing workload, TPC-E OLTP workload og benchmarks for ydeevne af reelle applikationer i den virkelige verden. Du kan også bruge SQL Server’s in-memory-databasefunktioner såsom hukommelsesoptimeret tempdb og understøttelse af persistent hukommelse til at forbedre ydeevnen for dine missionskritiske arbejdsbelastninger.
  • Intelligens på tværs af alle dine data med big data clusters: SQL Server giver dig mulighed for at få værdifuld indsigt fra alle dine data ved at forespørge på data på tværs af hele dit datagrundlag – Azure SQL Database, SQL Server, Teradata, MongoDB, Azure Cosmos DB og mange flere – uden at skulle replikere eller flytte data. Du kan endda opbygge en delt datasø ved at kombinere både ustrukturerede og strukturerede data i SQL Server og få adgang til dataene enten via Spark eller T-SQL.

Brugssager

SQL Server’s udvidelsesmuligheder og ydeevne gør det muligt at udnytte den i en lang række anvendelsestilfælde som f.eks:

  • Replikeringstjenester: SQL Server replikeringstjenester udnyttes af SQL Server til at harmonisere og replikere databaseobjekter, enten som en delmængde af de tilstedeværende objekter eller i deres helhed. Replikeringstjenesterne følger en abonnent/udgiver-model, dvs. at ændringerne sendes ud af en databaseserver (udgiver) og indsamles af andre (abonnenter).
  • Meddelelsestjenester: Meddelelsestjenester blev oprindeligt frigivet som en tilføjelse til SQL Server 2000 efter udgivelsen. Det er en mekanisme til at skabe datadrevne ændringer, som derefter sendes til abonnenterne på notifikationstjenesterne.
  • Machine learning-tjenester: SQL Server-machine learning tjenester fungerer i SQL Server-instansen, så folk kan udføre dataanalyser og machine learning uden at skulle flytte data på tværs af netværket eller blive hæmmet af deres computers hukommelse.
  • Analysetjenester: SQL Server-analysetjenester (SSAS) tilføjer datamining og OLAP-funktioner til SQL Server-databaser. OLAP-motoren tilbyder understøttelse af ROLAP (Relational Online Analytical Processing), MOLAP (Multidimensional Online Analytical Processing) og HOLAP (Hybrid Online Analytical Processing) lagringstilstande for data. SQL Server-analysetjenester understøtter også XML til analysestandard som den grundlæggende kommunikationsprotokol.

PostgreSQL vs SQL Server: Head-to-Head sammenligning

Nu hvor vi har en idé om de vigtigste aspekter af SQL Server og PostgreSQL, lad os gå i dybden med forskellene mellem de to. Du kan bruge nedenstående faktorer til at identificere hvilket databaseadministrationssystem der passer bedst til dine behov.

Tilgængelighed

PostgreSQL tilbyder et bredt sortiment af løsninger til at sikre høj tilgængelighed for brugerne, herunder write-ahead log shipping, shared-disk failover, data partitionering og forskellige replikeringsmetoder. Værktøjer som EDB Postgres Failover Manager giver automatisk failover for at sikre høj tilgængelighed ved at overvåge og identificere databasesvigt.

På den anden side indeholder SQL Server forskellige værktøjer til høj tilgængelighed, f.eks. log shipping, failover clusters og replikering. SQL Server’s tilgængelighedsgrupper, der arbejder døgnet rundt, giver automatisk failover, når bestemte betingelser er opfyldt. Dette tilbud er dog kun tilgængeligt i SQL Server’s enterprise-udgave.

Data og tabelstruktur

PostgreSQL tilbyder PL/pgSQL-programmeringssproget PL/pgSQL til sine brugere af hensyn til enkelheden. Yderligere funktionaliteter til standard SQL i PostgreSQL omfatter brugerdefinerede typer, brugerdefinerede moduler, udvidelser, JSON-understøttelse og ekstra muligheder for triggere og andre funktionaliteter.

SQL Server anvender T-SQL, som ligner standard SQL. T-SQL indeholder yderligere understøttelse af data- og strengbehandling, procedureprogrammering og lokale variabler.

Hvis du ønsker bedre forståelse på, hvordan systemerne cacher og behandler anmodninger, isolerer PostgreSQL processer ved at behandle dem som separate OS-processer. Hver database har en separat hukommelse og kører sin egen proces. Dette gør overvågning og administration meget let, men samtidig gør det det det vanskeligere at skalere flere databaser.

SQL Server bruger en bufferpulje, der kan begrænses eller øges afhængigt af behandlingsbehovet. Alt arbejde udføres i en enkelt pulje uden flere sider, i modsætning til PostgreSQL.

Både PostgreSQL og SQL Server understøtter midlertidige tabeller, da det giver mulighed for at gemme mellemresultater fra forgrenet kompleks logik og komplekse procedurer. Midlertidige tabeller kan være med til at forbedre databasens organisation og ydeevne ved at isolere mellemliggende information fra det væsentlige.

Defragmentering

Når udviklere ændrer forskellige dele af en SQL-database, finder ændringerne sted på forskellige steder i systemet og kan være svære at spore, læse og administrere. Derfor bør vedligeholdelsen også omfatte defragmentering – processen med at samle den opdaterede database ved at tildele indekser, generere nye sider og gennemgå strukturen på ny. Herefter kan databaserne frigøre den diskplads, der ikke udnyttes korrekt, så en database kan køre hurtigere.

PostgreSQL scanner tabellerne i et datalag for at lede efter tomme rækker og skiller sig af med unødvendige elementer. Ved at gøre dette frigør systemet diskpladsen. Denne metode kræver dog en masse CPU og kan påvirke applikationens ydeevne.

På den anden side har SQL Server en effektiv garbage collector, som ikke genererer mere end 15-20% overhead. Teknisk set kan udviklere også køre garbage collectors kontinuerligt, fordi det er så effektivt. For at opsummere kan man sige, at SQL Server tilbyder flere defragmenterings-metoder end PostgreSQL.

Indekser

Den måde, hvorpå en database håndterer indekser, er et bevis på dens anvendelighed, fordi indekser bruges til at lokalisere data uden at lede efter en bestemt række. Du kan også bruge indekser til at henvise til flere kolonner eller rækker. Du kan tildele det samme indeks til filer, præsentere dem på forskellige steder i databasen og samle alle disse dele med en enkelt søgning.

PostgreSQL understøtter indeksbaseret tabelorganisering, men de tidlige versioner anvendte ikke automatiske indeksopdateringer. Det giver dig også mulighed for at slå op i mange indekser i en enkelt søgning, hvilket betyder at du vil opdage mange oplysninger.

SQL Server tilbyder rig automatiseret funktionalitet til indeksstyring. De kan organiseres i klynger og opretholde den korrekte rækkefølge uden manuel indblanding. SQL Server understøtter også delvise indekser og søgninger med flere indekser.

Funktioner

PostgreSQL tilbyder ikke en indbygget job scheduler, i modsætning til andre SQL-databaser. Gentagende opgaver kræver eksterne værktøjer som cron, pgAgent eller pg_cron på Linux og SQLBackupAndFTP eller Task Scheduler på Windows.

Opgaver i SQL Server kan derimod nemt planlægges via SQL Server Management Studio.

PostgreSQL har en veludviklet MVCC (multi-version concurrency control) til at håndtere flere procedurer på samme tid. MVCC tilbyder snapshots af databaseoplysninger for at undgå at vise inkonsistenser forårsaget af samtidige transaktioner eller låsning af data, der finder sted i andre databasesystemer. PostgreSQL udnytter Serializable Snapshot Isolation (SSI) til at sikre transaktionsisolation.

SQL Server har et mindre udviklet multiversion konkurrencestyringssystem og er som standard afhængig af låsning af data for at undgå fejl fra samtidige transaktioner. SQL Server tilbyder også en optimistisk samtidighedsfunktion, som antager, at sådanne problemer sjældent opstår. Så i modsætning til at låse en række, kontrolleres den mod en cached version for at finde ud af, om der er sket ændringer.

Partitionering og Sharding

Når ydelsesforbedringer er afgørende for større databaser, og du har udnyttet dine gemte procedurer maksimalt, og din hardware også er opgraderet, vil du have brug for at fordele arbejdet på forskellige servere. Det er her, at partitionering og sharding kommer i spil.

Mens både sharding og partitionering i bund og grund handler om at opdele et stort datasæt i mindre delmængder, indebærer sharding, at dataene spredes over flere computere, mens partitionering ikke gør det.

Fra version 10.0 understøtter PostgreSQL deklarativ partitionering – partitionering efter område, liste eller hash.

MS SQL Server understøtter horisontal partitionering – opdeling af en tabel med mange rækker i flere tabeller med færre rækker.

MS SQL Server understøtter også sharding gennem federation. “Federerede partitionerede visninger” er visninger, hvor tabellerne er fordelt på forskellige servere for at afbalancere behandlingsbelastningen.

For at hente posterne fra serverne skal du bruge visse kommandoer. Disse kommandoer kaldes distribuerede partitionerede visninger. De bruger typiske SQL-anvisninger sammen med nøgleordet UNION for at hente data fra alle de distribuerede servere.

Ligeledes kan DML-anvisninger (INSERT, UPDATE og DELETE) anvendes, når specifikke regler overholdes på de underliggende tabeller. Bemærk også, at federerede partitionerede visninger kun understøttes i enterprise-udgaver.

Selv om federerede partitionerede visninger kan implementeres på enhver anden udgave, da der ikke er nogen syntaks, der skelner mellem dem, vil de ikke blive genkendt som federerede partitionerede visninger. Reglerne til at genkende visningen som partitioneret på tværs af servere er kun tilgængelige med enterprise-udgaver.

Ved at bruge denne partitioneringsteknik er der normalt en stigning i ydeevnen på 20-30% i de fleste programmer. Derfor er det et meget nyttigt værktøj, hvis din virksomhed håndterer mange data.

Replikering

Mens partitionering opdeler databasen i mindre delmængder og fordeler de partitionerede tabeller på forskellige knudepunkter, kopierer replikering databasen på tværs af flere databaser for at give et hurtigt udsyn og mindre svartid.

PostgreSQL tilbyder primær-sekundær replikering. Dette kan være asynkront eller synkront. Write-ahead logs (WALs) gør det muligt at dele ændringer med replika-noderne og dermed muliggøre asynkron replikering.

De andre former for replikering omfatter primært logisk replikering, streaming replikering og fysisk replikering.

  • Logisk replikering følger en udgivelses- og abonnementsmodel. Ændringer er baseret på identiteten af datareplikeringen, som f.eks. dens primære nøgle, snarere end dens fysiske placering.
  • Streaming replikation streamer i det væsentlige WAL’erne, så snart filen er oprettet, hvilket gør det muligt for standby-servere at blive hurtigt opdateret i stedet for at vente på, at filen bliver fyldt op.
  • Endelig implementeres fysisk replikering normalt med filer og mapper uden hensyntagen til indholdet på den fysiske placering. PostgreSQL tilbyder ikke multi-primary replikering nativt, men det kan udføres ved hjælp af andre tredjepartsværktøjer.

SQL Server-replikering duplikerer data fra en publisher-server til en abonnent. Den kan være asynkron eller asynkron afhængig af SQL Server-udgaven. Den tilbyder tre typer replikationer, nemlig: transaktionsreplikation, snapshot-replikation og sammenlægningsreplikation.

  • Transaktionsreplikation er typisk implementeret til server-til-server-miljøer, hvor ændringer leveres fra udgiveren til abonnenten, efterhånden som de sker.
  • Sammenlægningsreplikation implementeres normalt i situationer, hvor der kan opstå konflikter, til server-til-klient-miljøer, eller hvor data kan ændres og spores på enten abonnenten eller udgiveren og efterfølgende synkroniseres.
  • Snapshot-replikering implementeres, når data opdateres sjældent, ikke behøver at blive ændret inkrementelt, eller hvor data duplikeres nøjagtigt som de vises på et bestemt tidspunkt. Desuden tilbyder enterprise-udgaven peer-to-peer-replikering som en alternativ løsning til replikering af flere primære knudepunkter.

Sprog og syntaks

PostgreSQL er skrevet i C-sprog, og MS SQL er skrevet i C og C++. Med hensyn til sprogbinding er PostgreSQL meget let at bruge og oprette forbindelse til på grund af dets eksterne API libpq, som er meget veldesignet og dokumenteret.

SQL Server eksterne sprogbindinger kan dog afhænge af flere andre faktorer. Det kan være nødvendigt at installere ekstra drivere eller oprette klasser for at gemme de data, der forespørges; du skal således vide, hvordan dataene ser ud på kompileringstidspunktet. Du vil sandsynligvis være nødt til at henvise til dokumentationen, og det kan være ret tidskrævende at følge op på det.

Når det gælder funktioner i procedurale sprog, giver både PostgreSQL og SQL Server robust understøttelse. PostgreSQL understøtter datatypen JSON, og brugerne kan nemt bruge Python, Java, PHP, Perl og R med SQL, da de understøttes af den proceduremæssige sprogfunktion.

SQL Server giver understøttelse, men denne funktion er endnu ikke blevet forbedret, da der forekommer små fejl, og det kan tage noget tid at implementere, da det er langsomt. Brugeren skal først kompilere koden til en .dll-fil.

I PostgreSQL er der ikke behov for at oprette en .dll-fil først. PostgreSQL tilbyder også et stort antal regulære udtryk (regex) som grundlag for analytisk arbejde.

MS SQL Server har forholdsvis færre regex og understøtter visse kommandoer som substring og pattern index, som måske ikke er lige så gode som PostgreSQL.

Ydelse

Når det kommer til ydeevne, overtrumfer PostgreSQL SQL Server på flere måder. Vi har berørt partitionering, og selvom både PostgreSQL og SQL Server tilbyder partitionering, tilbyder PostgreSQL det gratis og med større effektivitet.

PostgreSQL tilbyder også bedre samtidighed, hvilket er en vigtig funktion, hvor flere processer kan få adgang til og ændre fælles data på samme tid. MVCC-egenskaben i PostgreSQL sikrer en mindre risiko for deadlock, idet den kun blokerer, hvis to forespørgsler forsøger at ændre den samme række på samme tid og serialisere de opdateringer, der foretages på den pågældende række.

Den MVCC-lås, der er erhvervet til forespørgsel af data, er ikke i konflikt med de låse, der er erhvervet til at skrive data. Dette minimerer låsestridigheder og giver bedre ydeevne i miljøer med flere brugere.

På den anden side har SQL Server en underudviklet samtidighed, og nogle processer kan endda blive låst fast. I modsætning til MVCC-funktionen oprettes der, når en række opdateres, en ny version af rækken i stedet for at overskrive den samme række, og begge dele bevares. Efterhånden flyttes de ældre versioner over i en systemdatabase kaldet tempdb. Der er dog lang vej igen med hensyn til dens samtidighed.

PostgreSQL tilbyder også indekseringsunderstøttelse for flere udvidelser, hvilket øger databasens ydeevne.

På den anden side mangler SQL-servere stadig at forbedre deres indekseringsimplementering, og de mangler stadig at inkludere arrays – en af de mest anvendte variabelstyper.

Prisfastsættelse

PostgreSQL blev udgivet under PostgreSQL-licensen, en liberal open source-licens. PostgreSQL Global Development Group er fortsat forpligtet til at gøre PostgreSQL tilgængelig som gratis og open source-software for evigt. Der er ingen planer om at ændre eller frigive PostgreSQL under en anden licens.

MS SQL Server blev frigivet under en kommerciel licens som en del af Microsoft-produkter. I begyndelsen af 2016 blev databasen gjort tilgængelig som et gratis værktøj for udviklere, men den understøtter kun én processor og maksimalt 1 GB hukommelse. Selv om den er gratis, mangler den flere funktioner, som du måske har brug for i en virksomhed. Du skal muligvis betale 899 dollars pr. server, hvis du har brug for flere servere. På det seneste koster SQL Server enterprise-udgaven 13.748 dollars.

Skalerbarhed

Databasesystemets evne til fortsat at fungere godt, når dataene øges for at opfylde en brugers behov uden at gå på kompromis med ydelsen kaldes skalerbarhed.

PostgreSQL tilbyder mange funktioner med hensyn til skalerbarhed og kan anvende flere CPU-kerner til parallelt at gennemføre forespørgsler hurtigt.

SQL Server kan også bruge kerner, men standardversionen er dog begrænset til fireogtyve CPU-kerner. Enterprise-versionen giver mulighed for brug af ubegrænsede CPU-kerner. SQL Server har også en hyper-scale-funktion, hvor du kan bestemme den nedre og øvre grænse, så du kan skalere nedad og opad alt efter behov.

Sikkerhed

Med stigningen i datatyveri, hacking og piratkopiering er sikkerhed faktisk blevet det vigtigste krav i databasesystemer. Både SQL Server og PostgreSQL tilbyder imidlertid fremragende datakryptering og autentificering.

Godkendelsesmetoder

På serversiden tilbyder PostgreSQL avancerede godkendelsesmetoder, herunder LDAP (lightweight directory access protocol) og PAM (pluggable authentication module), som potentielt reducerer angrebsfladen for PostgreSQL-databaseservere. Andre sikkerhedsforbedringer på serverniveau i PostgreSQL omfatter PostgreSQL-serverens lytteadresse, hostbaseret autentifikation og certifikatgodkendelse.

I MS SQL Server er der to sikkerhedsforbedringsfunktioner på serverniveau: Windows-autentifikationstilstand og blandet tilstand, som omfatter en autentifikationsproces af både Windows Server og MS SQL Server. Sikkerhedsmodellen i MS SQL Server er en tæt integration mellem Windows-servers Windows-autentifikationstilstand og databasen.

Kryptering af data

PostgreSQL giver mulighed for datakryptering og giver dig mulighed for at bruge SSL-certifikater (Secure Sockets Layer), når dine data sendes via internettet eller offentlige netværksmotorveje. Det giver dig også mulighed for at implementere værktøjer til godkendelse af klientcertifikater som en mulighed. Derudover kan du bruge kryptogene funktioner til at gemme krypterede data i PostgreSQL, der understøtter både symmetrisk nøgle- og offentlig nøgle-kryptering.

I MS SQL Server omfatter de tilgængelige datakrypteringsfunktioner gennemsigtig datakryptering (TDE), altid krypteret og kryptering på kolonneplan. TDE anvender AES-algoritmen (Advanced Encryption Standard) til kryptering af fysiske filer, som omfatter både data- og logfiler. Med funktionen altid krypteret kan du kryptere visse kolonner i begge tilstande, i hvile eller i bevægelse (dvs. at dataene også forbliver krypteret i hukommelsen).

Privilegier på brugerniveau

Endvidere kan du administrere forskellige brugere sammen med deres tilladelser (læse- og skrivetilladelser) i både PostgreSQL og SQL Server.

PostgreSQL indeholder privilegier på brugerniveau som rolletildelinger, privilegier på tabelniveau via roller og rollearvning. Auditing-muligheden giver dig mulighed for at gennemgå brugeres og gruppers dataadgangsaktiviteter i din database, hvilket giver et lag ekstra sikkerhed.

SQL Server opnår dette via brugergrupper og roller. Ressourcetilladelser tildeles direkte til brugerkontoen, og tilladelser arves fra en overordnet ressource.

Du kan også identificere problemer med samtidighed, langvarige forespørgsler og regelmæssige arbejdsbelastningsmålinger ved at overvåge og auditere aktiviteter i SQL Server.

Lagring

Lagring er en af de vigtigste faktorer for ethvert databasesystems ydeevne. Med stigningen i servernes processorkraft og den store hukommelsesunderstøttelse bliver det næsten afgørende for databaserne at give mulighed for flere lagringsmuligheder i systemet.

PostgreSQL er en objektrelationel database, mens Microsoft SQL Server er et relationelt databasesystem. Det betyder, at PostgreSQL tilbyder mere komplekse datatyper og tillader objektarvning, men det gør det også mere komplekst at arbejde med PostgreSQL. Den har en enkelt ACID-kompatibel lagringsmotor og initialiserer en ny systemproces med dens hukommelsesallokering for hver klientforbindelse. Derfor skal der allokeres mere hukommelse, når antallet af klientforbindelser på systemerne stiger.

SQL Server 2016 og højere kan bruge maksimalt hundrede computere eller virtuelle maskiner med maksimalt fem instanser, der kører pr. computer. Dette afhænger dog også af dens udgave. Enterprise-udgaven giver mulighed for maksimal båndbredde, hvorfor der vil blive tildelt flere lagermuligheder. Mens den seneste standardudgave giver mulighed for brug af op til 128 GB hukommelse, kan du bruge ubegrænset hukommelse i enterprise-versionen.

Support og fællesskab

PostgreSQL frigiver regelmæssigt opdaterede versioner gratis. For nylig har The PostgreSQL Global Development Group frigivet en opdatering til alle understøttede versioner af databasesystemet, som retter over 55 fejl, der er rapporteret i løbet af de sidste tre måneder. PostgreSQL har et stort fællesskab af udviklere, tredjepartsvirksomheder og entusiaster, der yder support og også forsøger at udvikle systemet ved at rette de rapporterede fejl.

SQL Server udgiver en ny version med få års mellemrum. Supportomkostningerne afhænger af licensbetingelserne. Microsoft SQL Server har også et supportfællesskab, hvor databaseanalytikere, udviklere, systemadministratorer eller andre, der er interesserede i platformen, kan stille spørgsmål eller lære mere om SQL Server gennem podcasts og webcasts som SQL Server Radio med Guy Glantser og Eitan Blumin, hvor brugerne får en masse at vide om SQL Server og dens kompatibilitet med andre Microsoft-værktøjer.

Både PostgreSQL og SQL Server kan udstyres med plugins. Prisen og kompatibiliteten afhænger af pluginet. Plugins kan være nyttige til at administrere, rense, tage backup af din database eller andet.

Adminer er f.eks. et datahåndteringsværktøj og kan bruges til at administrere data i både PostgreSQL og MS SQL Server. Flere andre database-plugins kan også bruges til at forbedre effektiviteten af din database nemlig: WP-Optimize, Better Search Replace, WP Database Backup, for at nævne nogle få. Når du opgraderer et databasesystem, kan der være omkostninger til datamigrering, men det er normalt for ethvert andet standard DBMS.

Ser du uventet adfærd? PostgreSQL-fællesskabet sætter en ære i at frigive software, der pålideligt gemmer dine data. Hvis du mener, at du har opdaget en fejl, skal du klikke på knappen nedenfor og følge instruktionerne i, hvordan du indsender en fejl.
PostgreSQL fejlopdagelsesmeddelelse (Billedekilde: PostgreSQL)

Udløsere og begivenheder

PostgreSQL har forskellige avancerede triggere, som du kan vælge imellem afhængigt af dit brugsscenarie. Understøttede udløsende hændelser er AFTER, BEFORE og INSTEAD OF, og de kan bruges til INSERT, UPDATE og DELETE-hændelser til at manipulere data. Som tidligere nævnt kan PostgreSQL køre disse triggers dynamisk og behøver ikke at kompilere dem til en .dll-fil før udførelse. Ovenstående funktioner kan bruges til at udføre en kompleks forespørgsel, når triggeren bliver påkaldt.

SQL Server tilbyder forskellige triggere til forskellige typer databasehændelser, nemlig DML-triggere, DDL-triggere og logon-triggere:

  • DML-triggers eller data manipulation language-triggers er triggere, der bruges til at manipulere data ved at indsætte, opdatere eller slette poster.
  • DDL-triggers er til DDL-hændelser (Data Definition Language), f.eks. oprettelse, sletning eller ændring af en database.
  • Logon-triggers bruges til logon-hændelser, f.eks. når en brugersession oprettes. Disse udløsere udløses efter vellykket godkendelse og før oprettelse af brugersessionen. De er nyttige til revision og kontrol af login-aktivitet.

Views

Views er i princippet virtuelle tabeller, som ikke lagrer data fysisk. De bruges generelt til sikkerhedsformål for at begrænse brugernes adgang til data. Både PostgreSQL og SQL Server understøtter opdaterbare visninger.

I PostgreSQL sker opdateringerne dog ikke automatisk, medmindre følgende forudsætninger er opfyldt:

  • Der skal være et afsnit i FROM-klausulen i forespørgslen til denne visning. Afsnittet kan være fra en tabel eller en anden opdaterbar visning.
  • Der må ikke være nogen vinduesfunktioner, aggregerede funktioner eller funktioner med sæt-returnering i valglisten.
  • Spørgsmålet må ikke indeholde kommandoerne HAVING, LIMIT, DISTINCT, WITH, INTERSECT, EXCEPT, OFFSET eller LIMIT på det øverste niveau.

Kort sagt: De visninger, der er oprettet med simple forespørgsler, kan opdateres, mens det er næsten umuligt at opdatere dem, der er oprettet med komplekse forespørgsler. På den anden side kan komplekse visninger opdateres ved hjælp af regler. Selvom PostgreSQL måske ikke giver mulighed for at køre materialiserede visninger, har det et modul kaldet matviews, som kan hjælpe med at genopbygge enhver materialiseret visning.

I SQL Server kan visninger opdateres automatisk, og både brugerdefinerede og systemdefinerede visninger understøttes. Desuden opdateres to tabelvisninger på samme tid, hvis de har forskellige nøgler, og opdateringsanvisningen ikke involverer mere end én tabel.

Desuden kan brugeren bruge triggers til at opdatere komplekse visninger. SQL Server giver også faciliteter til at køre materialiserede visninger, også kendt som indekserede visninger. I modsætning til materialiserede visninger i andre relationelle databaser er indekserede visninger synkroniseret med de underliggende data og opdateres således automatisk.

Mangler ved SQL Server og PostgreSQL

Selvom vi har diskuteret alle detaljerne om PostgreSQL og SQL Server, har begge dele deres ulemper.

Mens PostgreSQL er gratis, er det ikke ejet af en enkelt organisation. På grund af det har det kæmpet for at finde fodfæste blandt masserne, på trods af at det er meget omtalt. PostgreSQL fokuserer også mere på kompatibilitet end på hastighed. Derfor kræver modifikationer, der er lavet for at forbedre hastigheden, mere arbejde.

På den anden side er SQL Server ofte blevet kritiseret for sin dårlige brugergrænseflade. Den har komplekse funktioner til ydelsesjustering og har ingen native understøttelse af kildekontrol. Hvis du bruger den til din virksomhed, kan enterprise-versionen brænde et hul i lommen. SQL Server 2019 enterprise edition alene koster 13.748 dollars – det svarer til tretten værelser med Ikea-møbler for 13 værelser! Desuden kan licenseringen være ret udfordrende at forstå og ændrer sig løbende.

Hvis PostgreSQL og SQL Server ikke er helt efter din smag, kan du prøve MongoDB eller MariaDB til din unikke brugssag.

MongoDB er et dokumentorienteret, gratis og platformsuafhængigt databaseprogram, som nemt kan udnytte JSON-lignende dokumenter.

MariaDB er på den anden side en kommercielt understøttet fork af MySQL, hvis plug-in- og specialbyggede lagringsmotorer understøtter arbejdsbyrder, der generelt krævede en lang række forskellige databaser.

PostgreSQL vs SQL Server: Hvilken database skal du vælge?

Både PostgreSQL og SQL Server er vidt udbredte relationelle databaser, men hvem tager prisen som den bedste? Ud fra ovenstående sammenligninger overtrumfer PostgreSQL SQL Server i flere scenarier. Ikke alene er den open source og gratis, men den har også flere funktioner, der er let tilgængelige og kan implementeres automatisk, i modsætning til Microsoft SQL Server.

Desuden har PostgreSQL et mere velegnet samtidighedsstyringssystem. Det kan på glimrende vis håndtere tilfælde, hvor flere processer kan få adgang til og ændre delte data på samme tid.

Hvis du driver en lille virksomhed, kan PostgreSQL være et passende valg for dig, da det er gratis og tilbyder flere funktioner, der er nyttige til at administrere data. Den er nem at installere og kan implementeres i næsten alle slags operativsystemer. For virksomheder med en stor investering i Microsoft SQL Server-stakken har SQL Server dog sine fordele frem for PostgreSQL.

Opsummering

Alt i alt er både PostgreSQL og SQL Server funktionelle og alsidige databaser. Mens PostgreSQL kan bruges til næsten alle styresystemer og er velegnet til små virksomheder, der kræver maksimal funktionalitet, er SQL Server bedst til store virksomheder, især dem, der kræver brug af Microsoft-produkter.

I denne artikel har vi gennemgået de største forskelle mellem PostgreSQL og SQL Server og deres funktioner. Det “rigtige” valg vil i sidste ende komme an på, hvordan du planlægger at drive din virksomhed.

Mellem PostgreSQL vs SQL Server, hvilken database vil du planlægge at bruge til dit næste projekt, og hvorfor? Vi vil meget gerne høre dine tanker! Del dem i kommentarfeltet nedenfor.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.