Met een uitgebreid assortiment aan databases waar je uit kan kiezen, is voor veel gebruikers de afweging tussen PostgreSQL vs SQL Server voor de beste optie voor hun use case. Organisaties die PostgreSQL gebruiken voor hun activiteiten zouden kunnen overstappen op een database als Microsoft SQL Server, omdat die vooral geschikt is voor verschillende datawarehousingoplossingen, e-commerce en andere bedrijfsactiviteiten.

Historisch gezien is Microsoft SQL Server een favoriet voor organisaties die afhankelijk zijn van andere Microsoft producten, maar PostgreSQL heeft zich snel opgewerkt naar de top van de niche, niet alleen vanwege de voordelen van open-source, maar ook vanwege zijn actieve gebruikerscommunity en handige features.

Dit brengt ons tot deze discussie. Het vergelijken van PostgreSQL en SQL Server zal je helpen de mogelijke voordelen en afwegingen van de twee systemen beter te begrijpen, en welk systeem beter geschikt is voor jouw doel.

Laten we beginnen!

Wat is PostgreSQL?

PostgreSQL logo
PostgreSQL logo (Afbeeldingsbron: Uberconf)

PostgreSQL heeft zich gevestigd als een enterprise-class, geavanceerde open-source database die zowel JSON (niet-relationeel) als SQL (relationeel) query’s ondersteunt. Dit krachtige en stabiele databasebeheersysteem wordt ondersteund door meer dan dertig jaar aan actieve ontwikkeling vanuit de community en heeft bijgedragen aan zijn reputatie op het gebied van integriteit, betrouwbaarheid, veerkracht, prestaties en correctheid.

PostgreSQL wordt gebruikt als belangrijkste datawarehouse of datastore voor diverse mobiele, web, analytische en geospatiale applicaties. PostgreSQL beschikt over een rijke geschiedenis van ondersteuning van geavanceerde gegevenstypen, samen met de prestatie-optimalisatie die gebruikelijk is bij zijn commerciële database tegenhangers, zoals Microsoft SQL Server en Oracle.

PostgreSQL is niet alleen gratis en open-source, maar ook zeer uitbreidbaar. Je kunt bijvoorbeeld aangepaste functies genereren, je datatypes definiëren en zelfs code schrijven vanuit verschillende programmeertalen zonder je database opnieuw te hoeven compileren!

Geschiedenis

Hier volgt een kort overzicht van PostgreSQL door de jaren heen:

  • Ingres werd voor het eerst ontwikkeld in 1977.
  • Michael Stonebraker en zijn medewerkers ontwikkelden Postgres in 1986.
  • In 1990 werd ondersteuning voor PL/ pgSQL en ACID naleving toegevoegd aan PostgreSQL.
  • NYCPUG (New York City PostgreSQL User Group) sloot zich in 2013 aan bij de PgUS (United States PostgreSQL Association).
  • In 2014 luidde de PGconf een nieuw tijdperk in voor PostgreSQL gebruikers.

Belangrijkste features

Laten we nu eens kijken naar de belangrijkste eigenschappen van PostgreSQL die het zo’n onmisbare tool op de markt maken:

  • Naleving van normen en betrouwbaarheid: Door de write-ahead logging onderscheidt PostgreSQL zich als een zeer fouttolerante database. PostgreSQL is ook ACID-conform en biedt volledige ondersteuning voor views, foreign keys, triggers, joins en stored procedures, in verschillende talen. Het bevat de meeste SQL: 2008 datatypes, waaronder BOOLEAN, NUMERIC, INTEGER, DATE, VARCHAR, TIMESTAMP, INTERVAL en CHAR.
  • Robuuste uitbreidingen: PostgreSQL heeft robuuste featuresets zoals point-in-time herstel, multi-version concurrency (MVCC), tablespaces, granulaire toegangscontrole en online/hot backups. PostgreSQL is ook locale-bewust voor hoofdlettergevoeligheid, sorteren en opmaken. Het is zeer schaalbaar in zowel de hoeveelheid gegevens die het kan beheren als in het aantal gelijktijdige gebruikers dat kan worden ondergebracht.
  • Open-source licentie: Je kunt gebruik maken van de PostgreSQL broncode onder een open-source licentie, waardoor je de vrijheid hebt om het naar eigen inzicht aan te passen, te gebruiken en te implementeren, zonder enige kosten. Bovendien brengt PostgreSQL geen licentiekosten met zich mee, wat het risico van over-deployment wegneemt. PostgreSQL’s community van enthousiastelingen en contributors vindt regelmatig oplossingen en bugs, wat de algemene veiligheid van het databasesysteem ten goede komt.

Use cases

De veelzijdigheid van PostgreSQL maakt het mogelijk om het te gebruiken in een groot aantal use cases zoals:

  • Federatieve hub database: PostgreSQL’s JSON ondersteuning en foreign data wrappers maken het mogelijk om te koppelen met andere datastores – inclusief NoSQL datatypes – en te dienen als een federatieve hub voor polyglot databasesystemen.
  • Universele OLTP database: Zowel grote ondernemingen als startups gebruiken PostgreSQL als belangrijkste gegevensopslag ter ondersteuning van hun applicaties, producten en oplossingen op internetschaal.
  • Geospatiale database: PostgreSQL ondersteunt geografische objecten bij gebruik met de PostGIS extensie. Het kan ook worden gebruikt als geospatiale gegevensopslag voor geografische informatiesystemen (GIS) en locatie-gebaseerde diensten.
  • LAPP open-source stack: PostgreSQL kan ook dynamische apps en websites draaien als onderdeel van een robuust alternatief voor de LAMP stack. LAPP staat voor Linux, Apache, PostgreSQL, Perl, PHP en Python.

Wat is SQL Server?

SQL Server logo
SQL Server logo (Afbeeldingsbron: Software Engineering Stack Exchange)

SQL Server is ontwikkeld door Microsoft als een relationeel databasemanagementsysteem en kent een lange geschiedenis, tweeëndertig jaar, om precies te zijn. Microsoft SQL Server wordt beschouwd als een softwareproduct met als belangrijkste functie het opvragen en samenvoegen van gegevens zoals gevraagd door andere software applicaties.

Deze applicaties kunnen op een andere computer in een netwerk draaien of op dezelfde computer. Microsoft SQL Server heeft in de loop der jaren veel updates ondergaan, en is nu een van de best ondersteunde en een van de meest gereputeerde RDBMS’en op de markt.

SQL Server dankt een groot deel van zijn populariteit aan zijn maker, Microsoft. Toen MS SQL Server nog in de kinderschoenen stond, had Microsoft zich al gevestigd als een technologiereus.

SQL Server heeft zich weten te profileren als databasebeheersysteem met zijn brede scala aan applicaties en tools die het werken met gegevens vereenvoudigen. Zijn uitgebreide grafische gebruikersinterface (GUI) maakt intuïtief en gemakkelijk werken met de database mogelijk, terwijl je ook statistieken kunt genereren voor je rapporten.

Geschiedenis

Hier volgt een kort overzicht van Microsoft SQL Server door de jaren heen:

  • De evolutie van SQL Server begon in 1988 toen Microsoft samenwerkte met Sybase en Ashton-Tate om software te ontwikkelen voor het onderhouden en maken van databases die een impuls zou geven aan de zakelijke databasemarkt van Microsoft.
  • SQL Server 1.0 werd uitgerold in 1989. Destijds maakte het gebruik van de systeembeheerdersfaciliteit (SAF) om databases te genereren. Het had geen documentatie, maar gebruikers konden wel SQL queries uitvoeren en parameters instellen. De eerste codesnippet voor Microsoft SQL Server werd geschreven door Sybase.
  • Geleidelijk werden nieuwere versies uitgebracht met meer verbeteringen en mogelijkheden. SQL Server 2019, of Ram is de laatste toevoeging aan een pantheon van uitgebreide versies, omdat het zich richt op het nog intuïtiever maken van de databasefeatures. Dit zijn onder andere bigdataclusteropties, waardoor gebruikers de keuze krijgen om met gigantische datasets te werken.

Belangrijkste features

Genoeg gepraat over de geschiedenis. Laten we eens kijken naar een paar cruciale features die SQL Server zo geweldig maken:

  • Robuust beveiligingsplatform: Met SQL Server kun je je gegevens in beweging en in rust beschermen met ingebouwde features voor gegevensbescherming, gegevensclassificatie, waarschuwingen en bewaking. Met SQL Server kun je gemakkelijk gevoelige gegevens versleutelen en uitgebreide berekeningen uitvoeren op versleutelde gegevens, en aangepaste op rollen gebaseerde gegevenstoegang toestaan, compleet met complexe rijenfiltering.
  • Toonaangevende prestaties: SQL Server levert recordprestaties op Linux en Windows en is consequent toonaangevend in TPC-H datawarehousing workload, TPC-E OLTP workload en real-world applicatie prestatiebenchmarks. Je kunt ook gebruik maken van de in-memory databasemogelijkheden van SQL Server, zoals tempdb met geheugenoptimalisatie en ondersteuning van persistent geheugen, om de prestaties van je bedrijfskritische workloads te verbeteren.
  • Intelligentie over al je gegevens met bigdataclusters: Met SQL Server kun je waardevolle inzichten verkrijgen uit al je gegevens door queries uit te voeren in je hele data estate – Azure SQL Database, SQL Server, Teradata, MongoDB, Azure Cosmos DB en nog veel meer – zonder gegevens te hoeven repliceren of verplaatsen. Je kunt zelfs een gedeeld datalake bouwen door zowel ongestructureerde als gestructureerde gegevens in SQL Server te combineren en de gegevens te benaderen via Spark of T-SQL.

Use cases

De uitbreidbaarheid en prestaties van SQL Server maken het mogelijk om het te gebruiken in een groot aantal applicaties zoals:

  • Replicatiediensten: SQL Server replicatiediensten worden door SQL Server gebruikt om databaseobjecten te harmoniseren en te repliceren, hetzij als een subset van de aanwezige objecten, hetzij in hun geheel. Replicatiediensten houden zich aan een subscriber/publisher model, d.w.z. de wijzigingen worden verzonden door één databaseserver (publisher) en worden opgevangen door anderen (subscribers).
  • Notificatiediensten: Notificatiediensten werden oorspronkelijk uitgebracht als een post-release add-on voor SQL Server 2000. Het is een mechanisme voor het maken van gegevensgestuurde wijzigingen, die vervolgens naar de abonnees van de notificatiediensten worden gestuurd.
  • Machinelearningdiensten: SQL Server machine learningdiensten werken binnen de SQL Server instance, waardoor mensen gegevensanalyses en machine learning kunnen uitvoeren zonder gegevens over het netwerk te hoeven verplaatsen of gehinderd te worden door het geheugen van hun computers.
  • Analysediensten: SQL Server analysis services (SSAS) voegt datamining en OLAP mogelijkheden toe voor SQL Server databases. De OLAP engine biedt ondersteuning voor relationele online analytische verwerking (ROLAP), multidimensionale online analytische verwerking (MOLAP) en hybride online analytische verwerking (HOLAP) opslagmodi voor gegevens. SQL Server analysediensten ondersteunen ook XML voor de analysestandaard als fundamenteel communicatieprotocol.

PostgreSQL vs SQL Server: vergelijking van top tot teen

Nu we een idee hebben van de opvallende aspecten van SQL Server en PostgreSQL, laten we ons eens verdiepen in de verschillen tussen de twee. Je kunt de hieronder genoemde factoren gebruiken om te bepalen welk databasebeheersysteem het beste bij je behoeften past.

Beschikbaarheid

PostgreSQL biedt een breed scala aan oplossingen om hoge beschikbaarheid voor gebruikers te garanderen, waaronder write-ahead log shipping, shared-disk failover, datapartitionering en diverse replicatiemethoden. Tools zoals EDB Postgres Failover Manager bieden automatische failover om hoge beschikbaarheid te garanderen door databasefouten op te sporen en te identificeren.

Anderzijds bevat SQL Server diverse tools voor hoge beschikbaarheid, zoals log shipping, failover clusters en replicatie. De beschikbaarheidsgroepen van SQL Server die de klok rond werken zorgen voor automatische failover als aan specifieke voorwaarden wordt voldaan. Dit aanbod is echter alleen toegankelijk in de Enterprise editie van SQL Server.

Gegevens- en tabelstructuur

PostgreSQL biedt zijn gebruikers de procedurele programmeertaal PL/pgSQL voor eenvoud. Extra functionaliteiten naast standaard SQL in PostgreSQL zijn door de gebruiker gedefinieerde types, aangepaste modules, uitbreidingen, JSON ondersteuning, en extra opties voor triggers en andere functionaliteiten.

SQL Server gebruikt T-SQL, dat overeenkomsten vertoont met standaard SQL. T-SQL bevat extra ondersteuning voor gegevens- en stringverwerking, procedurele programmering en lokale variabelen.

PostgreSQL isoleert processen door ze als aparte OS processen te behandelen. Elke database heeft een apart geheugen en draait zijn eigen proces. Dit maakt monitoring en beheer erg gemakkelijk, maar tegelijkertijd maakt het het schalen van meerdere databases moeilijker.

SQL Server gebruikt een bufferpool die beperkt of vergroot kan worden op basis van de verwerkingsbehoefte. Al het werk wordt uitgevoerd in een enkele pool, zonder meerdere pagina’s, in tegenstelling tot PostgreSQL.

Zowel PostgreSQL als SQL Server bieden ondersteuning voor tijdelijke tabellen, omdat je daarmee tussenresultaten van vertakte complexe logica en complexe procedures kunt opslaan. Tijdelijke tabellen kunnen de organisatie en prestaties van de database helpen verbeteren door ook tussenliggende informatie te isoleren van het essentiële.

Defragmentatie

Wanneer ontwikkelaars verschillende delen van een SQL database wijzigen, vinden de wijzigingen op verschillende plaatsen in het systeem plaats en kunnen ze moeilijk te volgen, te lezen en te beheren zijn. Daarom moet onderhoud ook defragmentatie inhouden – het proces van het samenvoegen van de bijgewerkte database door indexen toe te wijzen, nieuwe pagina’s te genereren, en de structuur opnieuw te bekijken. De databases kunnen dan de schijfruimte vrijmaken die niet goed benut wordt, zodat een database sneller kan draaien.

PostgreSQL scant de tabellen van een gegevenslaag op zoek naar lege rijen en ontdoet zich van overbodige elementen. Hierdoor maakt het systeem schijfruimte vrij. Deze methode heeft echter veel CPU nodig en kan de prestaties van de applicatie beïnvloeden.

Aan de andere kant biedt SQL Server een efficiënte garbage collector die niet meer dan 15-20% overhead genereert. Technisch gezien kunnen ontwikkelaars garbage collectors ook continu laten draaien, omdat het zo effectief is. Kortom, SQL Server biedt meer defragmentatiemethoden dan PostgreSQL.

Indexen

De manier waarop een database indexen aanpakt is een goede indicatie voor de bruikbaarheid ervan, want indexen worden gebruikt om gegevens te lokaliseren zonder naar een bepaalde rij te zoeken. Je kunt indexen ook gebruiken om naar meerdere kolommen of rijen te verwijzen. Je kunt dezelfde index toewijzen aan bestanden, ze op verschillende plaatsen in de database presenteren, en al deze stukken verzamelen met een enkele zoekopdracht.

PostgreSQL ondersteunt op index gebaseerde tabelorganisatie, maar de vroege versies maakten geen gebruik van automatische indexupdates. Ook kun je met één zoekopdracht veel indexen opzoeken, waardoor je veel informatie kunt ontdekken.

SQL Server biedt rijke geautomatiseerde functionaliteit voor indexbeheer. Ze kunnen in clusters worden georganiseerd en de juiste rijvolgorde aanhouden zonder handmatige tussenkomst. SQL Server ondersteunt ook gedeeltelijke indexen en zoekopdrachten met meerdere indexen.

Features

PostgreSQL heeft geen ingebouwde taakplanner, in tegenstelling tot andere SQL databases. Voor repetitieve taken zijn externe tools nodig, zoals cron, pgAgent of pg_cron op Linux, en SQLBackupAndFTP of Task Scheduler op Windows.

Taken in SQL Server daarentegen kunnen gemakkelijk worden ingepland via SQL Server Management Studio.

PostgreSQL heeft goed ontwikkelde multi-version concurrency control (MVCC) om meerdere procedures tegelijk aan te pakken. MVCC biedt snapshots van database-informatie om te voorkomen dat inconsistenties worden weergegeven die worden veroorzaakt door gelijktijdige transacties of vergrendeling van gegevens die plaatsvinden in andere databasesystemen. PostgreSQL maakt gebruik van serializable snapshot isolation (SSI) om transactie-isolatie te garanderen.

SQL Server heeft een minder ontwikkeld multi-version concurrency control systeem en is standaard afhankelijk van het vergrendelen van gegevens om fouten door gelijktijdige transacties te voorkomen. SQL Server biedt ook een optimistische concurrencyfeature, die ervan uitgaat dat zulke problemen zich zelden voordoen. Dus, in plaats van een rij te vergrendelen, wordt hij vergeleken met een versie in de cache om te zien of er een verandering heeft plaatsgevonden.

Partitioneren en sharding

Als prestatiewinst essentieel is voor grotere databases en je hebt je opgeslagen procedures maximaal benut, en je hardware is ook opgewaardeerd, dan zou je het werk moeten verdelen over verschillende servers. Hier komen partitionering en sharding om de hoek kijken.

Hoewel zowel sharding als partitionering in wezen gaan over het opdelen van een grote dataset in kleinere subsets, impliceert sharding dat de gegevens worden verspreid over meerdere computers, terwijl partitionering dat niet doet.

Vanaf versie 10.0 ondersteunt PostgreSQL declaratieve partitionering – partitionering per range, lijst of hash.

MS SQL Server ondersteunt horizontale partitionering – het opsplitsen van een tabel met veel rijen in meerdere tabellen met minder rijen.

MS SQL Server ondersteunt ook sharding door federatie. “Federated partitioned views” zijn weergaven waarbij tabellen worden verspreid over verschillende servers om de verwerkingsbelasting in evenwicht te brengen.

Om de records van de servers op te halen heb je bepaalde commando’s nodig. Deze commando’s worden distributed partitioned views genoemd. Ze gebruiken typische SQL statements, samen met het sleutelwoord UNION, om gegevens te halen uit alle gedistribueerde servers.

Evenzo kunnen DML statements (INSERT, UPDATE en DELETE) worden gebruikt als specifieke regels in acht worden genomen op de onderliggende tabellen. Merk ook op dat federated partitioned views alleen worden ondersteund op Enterprise edities.

Hoewel federated partitioned views kunnen worden geïmplementeerd op elke andere editie, omdat er geen onderscheidende syntaxis voor is, zullen ze niet worden herkend als federated partitioned views. De regels om de weergave te herkennen als gepartitioneerd over servers zijn alleen beschikbaar bij Enterprise edities.

Het gebruik van deze partitioneringstechniek levert in de meeste applicaties meestal een prestatieverhoging van 20% tot 30% op. Het is dus een zeer nuttige tool als je bedrijf veel gegevens beheert.

Replicatie

Terwijl partitioneren het opdelen van de database in kleinere subsets is en het verdelen van de gepartitioneerde tabellen over verschillende nodes, is repliceren het kopiëren van de database over meerdere databases voor een snel overzicht en minder reactietijd.

PostgreSQL biedt primaire-secundaire replicatie. Dit kan asynchroon of synchroon. Write-ahead logs (WALs) maken het mogelijk om veranderingen te delen met de replicanodes, waardoor asynchrone replicatie mogelijk wordt.

De andere soorten replicaties zijn voornamelijk logische replicatie, streaming replicatie en fysieke replicatie.

  • Logische replicatie volgt een publish and subscribe model. Wijzigingen zijn gebaseerd op de identiteit van de gegevensreplicatie, zoals de primaire sleutel, in plaats van op de fysieke locatie.
  • Streaming replicatie streamt in wezen de WAL’s zodra het bestand is aangemaakt, zodat standby servers snel kunnen worden bijgewerkt, in plaats van te wachten tot het bestand is gevuld.
  • Fysieke replicatie wordt ten slotte meestal geïmplementeerd met bestanden en mappen, zonder rekening te houden met de inhoud binnen de fysieke locatie. PostgreSQL biedt zelf geen multi-primaire replicatie, maar het kan worden uitgevoerd met behulp van andere externe tools.

SQL Server replicatie dupliceert gegevens van een publisher server naar een subscriber. Het kan asynchroon of asynchroon zijn, afhankelijk van de SQL Server editie. Het biedt drie soorten replicaties, namelijk: transactionele replicatie, snapshot replicatie, en merge replicatie.

  • Transactionele replicatie wordt meestal geïmplementeerd voor server-naar-server omgevingen, waar wijzigingen van de publisher naar de subscriber worden gestuurd terwijl ze gebeuren.
  • Merge replicatie wordt gewoonlijk geïmplementeerd in situaties waar conflicten kunnen optreden, voor server-naar-client omgevingen, of waar gegevens kunnen worden gewijzigd en gevolgd op zowel de subscriber als de publisher en vervolgens worden gesynchroniseerd.
  • Snapshot replicatie wordt toegepast wanneer gegevens zelden worden bijgewerkt, niet incrementeel hoeven te worden gewijzigd, of wanneer gegevens precies zo worden gedupliceerd als ze op een bepaald moment verschijnen. Verder biedt de enterprise editie peer-to-peer replicatie als alternatieve oplossing voor replicatie met meerdere primaire knooppunten.

Taal en syntaxis

PostgreSQL is geschreven in de taal C, en MS SQL in C en C++. In termen van taalbinding is PostgreSQL heel gemakkelijk te gebruiken en aan te sluiten vanwege zijn externe API libpq, die heel goed ontworpen en gedocumenteerd is.

SQL Server externe taalbindingen kunnen echter afhankelijk zijn van verschillende andere factoren. Mogelijk moet je extra drivers installeren of klassen maken om de opgevraagde gegevens op te slaan; je moet dus weten hoe de gegevens er bij het compileren uitzien. Je zou waarschijnlijk de documentatie moeten raadplegen, en het kan nogal tijdrovend zijn om dit op te volgen.

Als het gaat om procedurele taalfeatures, bieden zowel PostgreSQL als SQL Server robuuste ondersteuning. PostgreSQL ondersteunt het gegevenstype JSON en gebruikers kunnen gemakkelijk Python, Java, PHP, Perl en R gebruiken met SQL, omdat ze ondersteund worden door de procedurele taalfeature.

Hoewel SQL Server wel ondersteuning biedt, moet deze feature nog verbeterd worden, want er komen lichte bugs voor, en het kan enige tijd duren om het te implementeren omdat het traag is. De gebruiker moet de code eerst compileren tot een .dll bestand.

In PostgreSQL is het niet nodig om eerst een .dll bestand te maken. PostgreSQL biedt ook een enorm aantal reguliere expressies (regex) als basis voor analytisch werk.

MS SQL Server heeft in vergelijking minder regex en ondersteunt bepaalde commando’s zoals substring en patternindex, die misschien niet zo goed zijn als PostgreSQL.

Prestaties

Als het op prestaties aankomt, overtroeft PostgreSQL SQL Server in verschillende opzichten. We hebben het gehad over partitionering, en hoewel zowel PostgreSQL als SQL Server partitionering bieden, biedt PostgreSQL het gratis aan, met meer efficiëntie.

PostgreSQL biedt ook betere concurrency, een belangrijke feature waarbij meerdere processen tegelijkertijd gedeelde gegevens kunnen benaderen en wijzigen. De MVCC feature van PostgreSQL zorgt voor een kleinere kans op deadlock, en blokkeert alleen als twee queries tegelijkertijd dezelfde rij proberen te wijzigen en de updates van die rij serialiseren.

Het MVCC lock dat wordt verkregen voor het bevragen van gegevens botst niet met de locks die worden verkregen voor het schrijven van gegevens. Dit minimaliseert lock conflicten en levert betere prestaties in omgevingen met meerdere gebruikers.

Aan de andere kant heeft SQL Server een onderontwikkelde concurrency, en sommige processen kunnen zelfs vastlopen. In tegenstelling tot de MVCC feature wordt bij elke bijwerking van een rij een nieuwe versie van de rij aangemaakt in plaats van dezelfde rij te overschrijven, en beide worden onderhouden. Geleidelijk aan verhuizen de oudere versies naar een systeemdatabase genaamd tempdb. De concurrency daarvan heeft echter nog een lange weg te gaan.

PostgreSQL biedt ook indexeringsondersteuning voor verschillende extensies, wat de prestaties van de database ten goede komt.

Aan de andere kant moeten SQL servers hun indexeringsimplementatie nog verbeteren, ze moeten nog arrays opnemen – een van de meest gebruikte variabele types.

Prijzen

PostgreSQL werd uitgebracht onder de PostgreSQL Licentie, een liberale open-source licentie. De PostgreSQL Global Development Group blijft zich inzetten om PostgreSQL voor altijd beschikbaar te maken als vrije en open-source software. Er zijn geen plannen om PostgreSQL onder een andere licentie te veranderen of uit te brengen.

MS SQL Server werd uitgebracht onder een commerciële licentie als onderdeel van Microsoft producten. Begin 2016 werd de database beschikbaar gesteld als een gratis tool voor ontwikkelaars, maar het ondersteunt slechts één processor en 1 GB maximaal geheugen. Hoewel het gratis is, mist het verschillende features die je misschien nodig hebt voor jouw bedrijf. Mogelijk moet je $899 per server betalen als je meer servers nodig hebt. De huidige prijs van de SQL Server Enterprise editie bedraagt 13.748 dollar.

Schaalbaarheid

Het vermogen van het databasesysteem om goed te blijven functioneren wanneer de gegevens worden uitgebreid om aan de behoefte van een gebruiker te voldoen, zonder afbreuk te doen aan de prestaties, wordt schaalbaarheid genoemd.

PostgreSQL biedt veel mogelijkheden op het gebied van schaalbaarheid en kan meerdere CPU cores gebruiken om snel parallelle queries uit te voeren.

SQL Server kan ook cores gebruiken, maar de standaardversie is beperkt tot vierentwintig CPU cores. De enterprise versie staat het gebruik van onbeperkte CPU cores toe. SQL Server beschikt ook over een hyper-scale feature, waarbij je de onder- en bovengrens kunt bepalen, zodat je naar beneden en naar boven kunt schalen al naar gelang de behoefte.

Beveiliging

Met de opkomst van gegevensdiefstal, hacking en piraterij is beveiliging inderdaad de belangrijkste vereiste voor databasesystemen. Zowel SQL Server als PostgreSQL bieden echter uitstekende gegevensencryptie en -verificatie.

Authenticatiemethoden

Aan de serverkant biedt PostgreSQL geavanceerde authenticatiemethoden, waaronder het lichtgewicht directory access protocol (LDAP) en de pluggable authentication module (PAM), die het aanvalsoppervlak van de PostgreSQL databaseservers mogelijk verkleinen. Andere verbeteringen van de beveiliging van PostgreSQL op serverniveau zijn het PostgreSQL server luisteradres, hostgebaseerde authenticatie en certificaat authenticatie.

In MS SQL Server zijn er twee beveiligingsverbeteringen op serverniveau: Windows authenticatiemodus en mixed-mode die een authenticatieproces door zowel Windows Server als MS SQL Server omvat. Het beveiligingsmodel van MS SQL Server is een hechte integratie tussen de Windows-verificatiemodus van Windows Server en de database.

Gegevensversleuteling

PostgreSQL biedt gegevensversleuteling en staat je toe om secure sockets layer (SSL) certificaten te gebruiken wanneer je gegevens via het web of openbare netwerkwegen reizen. Ook kun je als optie authenticatie-instrumenten voor cliëntcertificaten implementeren. Bovendien kun je cryptogene functies gebruiken om versleutelde gegevens in PostgreSQL op te slaan die zowel symmetrische- als publieke-sleutel encryptie ondersteunen.

In MS SQL Server omvatten de beschikbare gegevensversleutelingsfuncties transparante gegevensversleuteling (TDE), altijd versleuteld, en versleuteling op kolomniveau. TDE gebruikt het AES-algoritme (advanced encryption standard) voor het versleutelen van fysieke bestanden, waaronder zowel gegevens- als logbestanden. Met de functie altijd versleuteld kun je bepaalde kolommen in beide toestanden versleutelen, in rust of in beweging (d.w.z. de gegevens blijven ook in het geheugen versleuteld).

Privileges op gebruikersniveau

Verder kun je verschillende gebruikers beheren, samen met hun rechten (lezen, schrijven) in zowel PostgreSQL als SQL Server.

PostgreSQL bevat privileges op gebruikersniveau als roltoewijzingen, privileges op tabelniveau via rollen, en rolovererving. Met de auditing optie kun je de gegevenstoegangsactiviteiten van gebruikers en groepen in je database bekijken, wat een extra beveiligingslaag biedt.

SQL Server bereikt dit via gebruikersgroepen en rollen. Resource-machtigingen worden rechtstreeks aan de gebruikersaccount toegekend, en machtigingen worden geërfd van een parent resource.

Je kunt ook concurrency problemen, langlopende queries en regelmatige werklastmetingen vaststellen door activiteiten in SQL Server te controleren en te auditen.

Opslag

Opslag is een van de belangrijkste factoren voor de prestaties van elk databasesysteem. Met de toename van de rekenkracht van de servers en de ondersteuning van grootschalig geheugen, wordt het bijna essentieel voor de databases om meer opslagmogelijkheden in het systeem mogelijk te maken.

PostgreSQL is een object-relationele database, terwijl Microsoft SQL Server een relationeel databasesysteem is. Dit betekent dat PostgreSQL complexere gegevenstypen biedt en objectovererving toestaat, maar het maakt het werken met PostgreSQL ook complexer. Het heeft een enkele ACID-conforme opslagmachine en initialiseert een nieuw systeemproces met zijn geheugentoewijzing voor elke clientverbinding. Met de toename van clientverbindingen op systemen moet dus meer geheugen worden toegewezen.

SQL Server 2016 en hoger kan maximaal honderd computers of virtuele machines gebruiken met maximaal vijf instanties die per computer draaien. Ook dit is echter afhankelijk van de editie. De Enterprise editie staat maximale bandbreedte toe, vandaar dat meer opslagmogelijkheden zouden worden toegekend. Terwijl de laatste standaard editie het gebruik van maximaal 128 GB geheugen toestaat, kun je in de Enterprise versie onbeperkt geheugen gebruiken.

Ondersteuning & gemeenschap

PostgreSQL brengt regelmatig gratis bijgewerkte versies uit. Onlangs heeft The PostgreSQL Global Development Group een update uitgebracht voor alle ondersteunde versies van het databasesysteem, waarbij meer dan 55 bugs zijn opgelost die in de afgelopen drie maanden zijn gemeld. PostgreSQL heeft een grote gemeenschap van ontwikkelaars, externe bedrijven en enthousiastelingen die ondersteuning bieden en ook proberen het systeem verder te ontwikkelen door de gemelde bugs op te lossen.

SQL Server brengt om de paar jaar een nieuwe versie uit. De ondersteuningskosten hangen af van de voorwaarden van de licentie. Microsoft SQL Server heeft ook een ondersteuningsgemeenschap, waar database-analisten, ontwikkelaars, systeembeheerders, of iedereen die geïnteresseerd is in het platform vragen kan stellen, of meer kan leren over SQL Server via podcasts en webcasts zoals de SQL Server Radio met Guy Glantser en Eitan Blumin, waar gebruikers veel te weten komen over de SQL Server en de compatibiliteit ervan met andere Microsoft tools.

Zowel PostgreSQL als SQL Server kunnen worden uitgerust met plugins. De prijs en de compatibiliteit hangen af van de plugin. Plugins kunnen behulpzaam zijn bij het beheren, opschonen, backuppen van je database, of meer.

Adminer bijvoorbeeld is een hulpmiddel voor gegevensbeheer en kan worden gebruikt om gegevens in zowel PostgreSQL als MS SQL Server te beheren. Verschillende andere databaseplugins kunnen ook gebruikt worden om de efficiëntie van je database te verbeteren nl: WP-Optimize, Better Search Replace, WP Database Backup, om er een paar te noemen. Wanneer je een databasesysteem opwaardeert, kunnen er kosten voor gegevensmigratie zijn, maar dat is normaal voor elk ander standaard DBMS.

PostgreSQL bug discovery bericht
PostgreSQL bug discovery bericht (Image Source: PostgreSQL)

Triggers & events

PostgreSQL heeft verschillende geavanceerde triggers waaruit je kunt kiezen, afhankelijk van je use case. Ondersteunde triggering events zijn AFTER, BEFORE, en INSTEAD OF, en ze kunnen gebruikt worden voor INSERT, UPDATE, en DELETE events om gegevens te manipuleren. Zoals eerder gezegd, kan PostgreSQL deze triggers dynamisch uitvoeren en hoeven ze voor uitvoering niet in een .dll bestand gecompileerd te worden. De bovenstaande functies kunnen worden gebruikt om een complexe query uit te voeren wanneer de trigger wordt aangeroepen.

SQL Server biedt diverse triggers voor verschillende soorten databasegebeurtenissen, namelijk DML triggers, DDL triggers, en logon triggers:

  • DML triggers of data manipulation language triggers zijn triggers die gebruikt worden om gegevens te manipuleren, door records in te voegen, bij te werken of te verwijderen.
  • DDL triggers zijn voor data definition language (DDL) gebeurtenissen, zoals het aanmaken, droppen of wijzigen van een database.
  • Logon triggers worden gebruikt voor logon gebeurtenissen, zoals het opzetten van een gebruikerssessie. Deze triggers gaan af na succesvolle authenticatie en voor het opzetten van de gebruikerssessie. Ze zijn nuttig voor het controleren en beheersen van aanmeldingsactiviteiten.

Views

Views zijn in wezen virtuele tabellen waarin gegevens niet fysiek worden opgeslagen. Ze worden meestal gebruikt voor beveiligingsdoeleinden om de toegang van gebruikers tot gegevens te beperken. Zowel PostgreSQL als SQL Server ondersteunen bewerkbare views.

Echter, in PostgreSQL gebeuren de updates niet automatisch, tenzij aan de volgende voorwaarden is voldaan:

  • Er moet een sectie zijn in de FROM-clausule in de query van die weergave. De sectie kan afkomstig zijn uit een tabel of een andere updatebare weergave.
  • Er mogen geen vensterfuncties, aggregaatfuncties of set-return functies in de selectielijst staan.
  • De query mag op het hoogste niveau niet de commando’s HAVING, LIMIT, DISTINCT, WITH, INTERSECT, EXCEPT, OFFSET of LIMIT bevatten.

Kortom, de met eenvoudige queries aangemaakte views kunnen worden bijgewerkt, terwijl het bijna onmogelijk is om de met complexe queries aangemaakte views bij te werken. Aan de andere kant kunnen complexe weergaven worden bijgewerkt met behulp van regels. PostgreSQL mag dan niet de mogelijkheid bieden om gematerialiseerde views te draaien, het heeft wel een module genaamd matviews, die kan helpen bij het herbouwen van elk gematerialiseerd view.

In SQL Server kunnen weergaven automatisch worden bijgewerkt, en zowel door de gebruiker gedefinieerde als systeemgedefinieerde weergaven worden ondersteund. Bovendien worden twee tabeloverzichten tegelijk bijgewerkt als ze verschillende sleutels hebben en het update statement niet meer dan één tabel betreft.

Bovendien kan de gebruiker triggers gebruiken om complexe weergaven bij te werken. SQL Server biedt ook faciliteiten om gematerialiseerde views, ook bekend als geïndexeerde views, uit te voeren. In tegenstelling tot gematerialiseerde weergaven in andere relationele databases, worden geïndexeerde weergaven gesynchroniseerd met de onderliggende gegevens en dus automatisch bijgewerkt.

Tekortkomingen van SQL Server en PostgreSQL

Hoewel we alle details over PostgreSQL en SQL Server hebben besproken, hebben beide hun nadelen.

PostgreSQL is weliswaar gratis, maar niet eigendom van één organisatie. Daarom heeft het moeite om voet aan de grond te krijgen bij het grote publiek, ondanks de vele mogelijkheden. PostgreSQL richt zich ook meer op compatibiliteit dan op snelheid. Aanpassingen die bedoeld zijn om de snelheid te verbeteren, vergen dus meer werk.

Aan de andere kant is SQL Server vaak bekritiseerd om zijn slechte gebruikersinterface. Het heeft complexe functies voor performance tuning en geen native ondersteuning voor broncontrole. Als je het voor je bedrijf gebruikt, kan de Enterprise versie een flinke deuk uit je budget slaan. SQL Server 2019 Enterprise editie alleen al kost 13.748 dollar – ongeveer dertien kamers aan Ikea meubilair! Bovendien kunnen de licenties nogal lastig te begrijpen zijn en veranderen ze voortdurend.

Als PostgreSQL en SQL Server niet helemaal naar je zin zijn, kun je MongoDB of MariaDB uitproberen voor jouw unieke use case.

MongoDB is een documentgeoriënteerd, gratis te gebruiken, platformoverschrijdend databaseprogramma dat gemakkelijk JSON-achtige documenten kan gebruiken.

MariaDB, aan de andere kant, is een commercieel ondersteunde fork van MySQL waarvan de pluggable en speciaal gebouwde opslag-engines werklasten ondersteunen die over het algemeen een grote verscheidenheid aan verschillende databases vereisen.

PostgreSQL vs SQL Server: welke database moet je kiezen?

Zowel PostgreSQL als SQL Server zijn veelgebruikte relationele databases, maar wie wint het? Uit bovenstaande vergelijkingen blijkt dat PostgreSQL SQL Server in verschillende scenario’s overtroeft. Niet alleen is het open-source en gratis, maar het heeft ook verschillende functies die gemakkelijk beschikbaar zijn en automatisch geïmplementeerd kunnen worden, in tegenstelling tot Microsoft SQL Server.

Bovendien heeft PostgreSQL een geschikter concurrency management systeem. Het kan briljant omgaan met gevallen waarin meerdere processen tegelijkertijd gedeelde gegevens kunnen benaderen en wijzigen.

Als je een klein bedrijf hebt, zou PostgreSQL een geschikte keuze voor je kunnen zijn, omdat het gratis is en verschillende functies biedt die nuttig zijn om de gegevens te beheren. Het is eenvoudig te installeren en kan in bijna alle soorten besturingssystemen worden geïmplementeerd. Voor bedrijven met een enorme investering in de Microsoft SQL Server stack heeft SQL Server echter zijn voordelen boven PostgreSQL.

Samenvatting

Al met al zijn zowel PostgreSQL als SQL Server functionele en veelzijdige databases. Terwijl PostgreSQL voor bijna elk besturingssysteem kan worden gebruikt en geschikt is voor kleine bedrijven die maximale functionaliteit nodig hebben, is SQL Server het beste voor enorme bedrijven, vooral voor bedrijven die het gebruik van Microsoft producten vereisen.

In dit artikel hebben we de belangrijkste verschillen behandeld tussen PostgreSQL en SQL Server, en hun functies. De “juiste” keuze zal uiteindelijk afhangen van hoe je je bedrijf wilt runnen.

Als je moest kiezen tussen PostgreSQL en SQL Server, welke database zou jij willen gebruiken voor je volgende project, en waarom? We horen graag je gedachten! Deel ze in de commentaarsectie hieronder.

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.