Wat is Postgres? De database achter veel apps, uitgelegd
Postgres (officieel PostgreSQL) is een gratis, open-source relationele database: een programma dat de gegevens van een app opslaat in tabellen met rijen en kolommen, die tabellen aan elkaar koppelt en vragen erover beantwoordt in een taal die SQL heet. Het staat bekend om betrouwbaarheid, strikte bewaking van correcte gegevens en flexibiliteit — van een inschrijvingslijst tot de administratie van een groot bedrijf. Veel webapps, en veel diensten die ze hosten, draaien erop.
Waarom het ertoe doet als je met AI bouwt
Wanneer een AI-appbouwer „een database” aan je project toevoegt, is de kans groot dat het Postgres is. Je hoeft geen SQL te schrijven om het te gebruiken, maar een beetje begrip helpt enorm:
- Je kunt gegevens beschrijven in de vorm die de database nodig heeft. „Klanten hebben veel bestellingen; elke bestelling heeft veel artikelen” vertaalt zich rechtstreeks naar tabellen.
- Je kunt om de juiste bescherming vragen. Postgres kan slechte gegevens zelf weigeren — een dubbel e-mailadres, een bestelling voor een klant die niet bestaat — als de AI de regels instelt.
- Je kunt lezen wat de AI heeft gedaan. Tabelnamen, kolommen en relaties zijn makkelijk te controleren in een tabelweergave, zelfs als je de code nooit aanraakt.
Een dagelijkse vergelijking: een zeer strak archief
Stel je een archiefkantoor voor met een kast voor elk soort ding — één voor klanten, één voor bestellingen, één voor producten. Elke kaart in een la heeft dezelfde gedrukte vakjes om in te vullen. Elke kaart heeft een uniek nummer, en een bestelkaart herhaalt de gegevens van de klant niet; die zegt alleen „klant #214”, en verwijst zo naar de klantenla.
De medewerker is streng. Hij archiveert geen bestelling die naar een klant verwijst die niet bestaat. Hij accepteert geen kaart waarvan een verplicht vakje leeg is. En als je hem vraagt geld van de ene rekeningkaart naar de andere te verplaatsen, dan doet hij beide helften of geen van beide — nooit maar één.
Die medewerker is Postgres. De laden zijn tabellen, de gedrukte vakjes zijn kolommen, elke kaart is een rij, en de link „klant #214” is een foreign key (vreemde sleutel).
Waar Postgres goed in is
| Functie | Wat het in gewone woorden betekent |
|---|---|
| Tabellen en relaties | Gegevens staan in tabellen die naar elkaar verwijzen, zodat niets op vijf plekken wordt gekopieerd |
| SQL | Een standaardtaal om vragen te stellen: „alle onbetaalde bestellingen van vorige maand, nieuwste eerst” |
| Transacties (ACID) | Een groep wijzigingen gebeurt helemaal of helemaal niet, zelfs als de server halverwege crasht |
| Constraints | Regels die de database zelf afdwingt: verplichte velden, unieke e-mailadressen, geldige links tussen tabellen |
| Indexen | Opzoeksnelkoppelingen zodat zoekopdrachten snel blijven naarmate tabellen groeien |
| JSONB | Flexibele, documentachtige gegevens opslaan in een kolom wanneer een vaste structuur niet past |
| Volledige-tekstzoekopdracht | Woorden zoeken in tekstvelden zonder aparte zoekdienst, voor eenvoudige gevallen |
| Extensies | Add-ons zoals PostGIS voor kaarten en locaties, of pgvector voor het opslaan van AI-embeddings |
| Row-level security | Regels in de database over welke rijen een bepaalde gebruiker mag zien |
Postgres begon als onderzoeksproject aan de Universiteit van Californië, Berkeley, in de jaren tachtig, en wordt sinds de jaren negentig openlijk ontwikkeld door een wereldwijde gemeenschap. Die lange geschiedenis is de reden dat het vaak de standaardkeuze is: het is goed gedocumenteerd, breed ondersteund, en elke grote cloudprovider biedt een beheerde versie aan.
Een uitgewerkt voorbeeld: een spreadsheet omzetten in tabellen
Stel dat je een klein cateringbedrijf hebt en alles in één spreadsheet bijhoudt: elke rij is een evenement, met de naam, telefoon en e-mail van de klant, de datum, de menu-items en de prijs.
De problemen duiken snel op. Dezelfde klant staat op zes rijen met twee verschillende telefoonnummers. De menu-items zijn in één cel getypt als „canapés x40, salade x2”, dus je kunt niet optellen hoeveel canapés je in deze maand hebt gemaakt.
In Postgres wordt dezelfde informatie vier tabellen:
| Tabel | Kolommen | Opmerkingen |
|---|---|---|
| clients | id, name, phone, email | E-mail moet uniek zijn |
| events | id, client_id, date, venue, status | client_id moet een bestaande klant zijn |
| menu_items | id, name, unit_price | Eén rij per gerecht |
| event_items | event_id, menu_item_id, quantity | Koppelt evenementen aan gerechten, met een aantal |
Nu staat het telefoonnummer van een klant op één plek. „Hoeveel canapés hebben we in maart gemaakt?” is één SQL-query. En wanneer je een nieuw evenement met zijn items vastlegt, zorgt een transactie ervoor dat je nooit een evenement overhoudt waarvan de helft van de items is opgeslagen.
Dit is de stap die mensen overslaan wanneer ze een AI vragen om „van mijn spreadsheet een app te maken”. De gids over het omzetten van een spreadsheet in een app gaat verder.
Belangrijke termen
- Tabel, rij, kolom: een soort ding, één exemplaar ervan, één stuk informatie erover.
- Primaire sleutel: de unieke ID van elke rij, meestal
id. - Foreign key: een kolom die naar een rij in een andere tabel verwijst, zoals
client_id. - Schema: het ontwerp van al je tabellen en kolommen.
- Migratie: een opgeslagen, herhaalbare wijziging van het schema, zoals „voeg een kolom
venuetoe aan events”. - Query: een vraag of instructie geschreven in SQL.
- Connection string: het adres en wachtwoord waarmee je backend de database bereikt. Het is een geheim — zie omgevingsvariabelen en geheimen.
- Beheerde Postgres: een dienst die Postgres voor je draait, back-upt en bijwerkt.
Voor de dagelijkse handelingen die elke app op deze tabellen uitvoert — aanmaken, lezen, bijwerken, verwijderen — zie wat CRUD betekent.
Veelgemaakte fouten en misverstanden
- Eén gigantische tabel. De spreadsheet kolom voor kolom kopiëren leidt tot dezelfde duplicatieproblemen. Splits dingen die zich herhalen in hun eigen tabellen.
- Lijsten opslaan in één tekstveld. „canapés x40, salade x2” in één kolom kan niet goed worden geteld of doorzocht. Gebruik een koppeltabel.
- Geen constraints. Zonder „e-mail moet uniek zijn” of „elk evenement heeft een klant nodig” komen slechte gegevens stilletjes binnen en duiken maanden later op.
- Het databaseschema met de hand wijzigen in productie. Vraag om schemawijzigingen als migraties, zodat de wijziging wordt vastgelegd en herhaald kan worden.
- De browser rechtstreeks met de database laten praten. De frontend moet via je backend gaan, die rechten controleert. Het databasewachtwoord hoort nooit in paginacode.
- „Postgres is alleen voor grote bedrijven.” Het draait even goed voor een wachtlijst van 50 rijen, en je hoeft er niet vanaf te stappen als je groeit.
- Aannemen dat een database een back-up is. Het slaat gegevens op; het beschermt je niet automatisch tegen het verwijderen ervan. Controleer welke back-ups je host biedt.
Wat je aan je AI-builder kunt vragen
- „Sla [dingen] op in een database. Tabellen: … met deze velden: … Koppel elke [bestelling] aan een [klant].”
- „Maak e-mail uniek bij klanten. Maak deze velden verplicht. Sta geen bestelling toe zonder klant.”
- „Gebruik migraties voor elke schemawijziging.”
- „Voeg indexen toe voor de zoekopdrachten die we het vaakst doen: bestellingen per klant en per datum.”
- „Alle databasetoegang loopt via de server. Bewaar de connection string in omgevingsvariabelen.”
Als je helemaal nieuw bent met het idee van een database, begin dan met wat een database is en kom daarna hier terug. Een full-stack-app laat zien waar de database staat naast de frontend en de backend.
Postgres op Mythex
Mythex geeft elk project dat er een nodig heeft zijn eigen toegewijde Postgres-database. Je configureert niets: vraag het in de chat („sla wachtlijst-e-mails op in een database”) of gebruik het commando /database, en Mythex koppelt de database, zet de verbindingsgegevens in je app en kan de tabellen voor je aanmaken. De database van een gepubliceerde app gaat slapen na vijf minuten inactiviteit en wordt wakker bij het volgende verzoek; je betaalt voor de tijd dat hij daadwerkelijk wakker was, uit hetzelfde creditsaldo als het bouwen. Details staan in de databasedocumentatie, en dashboardsjablonen zijn een goede plek om door data aangedreven apps te zien.
Veelgestelde vragen
Is Postgres hetzelfde als PostgreSQL?
Ja. PostgreSQL is de officiële naam en Postgres is de gebruikelijke korte naam; beide verwijzen naar dezelfde open-source relationele database.
Is Postgres gratis?
Ja. PostgreSQL is open source onder de permissieve PostgreSQL-licentie, dus je mag het gratis gebruiken, ook in commerciële producten. Je betaalt alleen voor de servers of de beheerde dienst die het draait.
Wat is het verschil tussen Postgres en MySQL?
Beide zijn gratis, relationele SQL-databases en beide zijn prima voor de meeste apps. Postgres staat bekend om strikte gegevensintegriteit, rijke gegevenstypen zoals JSONB en arrays, en een grote extensie-ecosysteem; MySQL staat bekend om eenvoud en een lange geschiedenis in webhosting.
Is Postgres geschikt voor een kleine app?
Ja. Het werkt goed voor een wachtlijst met één tabel en voor grote productiesystemen, dus je hoeft niet van database te wisselen naarmate de app groeit. Beheerde diensten maken het makkelijk om het te draaien zonder databasebeheerder.