PostgreSQL: de database onder je Laravel applicatie

Laravel praat net zo goed met PostgreSQL als met MySQL. Migrations, Eloquent en de query builder werken zonder omwegen, dus je kiest PostgreSQL om wat de database zelf met je gegevens kan. Wij ontwerpen het datamodel en schrijven de queries. In productie beheren we de database ook.

Waar PostgreSQL het verschil maakt

PostgreSQL kent een eigen type voor een periode met een begin en een eind. Op zo'n kolom leg je een GiST-index, waarmee de database overlappende periodes terugvindt zonder alle rijen langs te lopen. Een agenda die moet weten of een afspraak botst met een andere afspraak, laat die vraag daarmee door de database beantwoorden in plaats van door PHP. Met een exclusion constraint weiger je een tweede boeking op dezelfde stoel al bij het opslaan.

Verder heb je JSONB voor gegevens waarvan de vorm per record verschilt, met een index eroverheen, en window-functies waarmee een rapportage in één query past. Voor teksten die doorzoekbaar moeten zijn zit er full text search in de database zelf.

PostgreSQL in Laravel

De verbinding staat in config/database.php en verder verandert er weinig aan de manier waarop je werkt. Wat je wel merkt, zit in de queries. PostgreSQL vergelijkt tekst hoofdlettergevoelig en MySQL doet dat met zijn standaardcollatie niet, dus een zoekopdracht op een naam of een e-mailadres komt zomaar leeg terug. Voor een vergelijking die dat niet moet zijn gebruik je ilike.

Bij groupBy is PostgreSQL strenger, want elke kolom die je selecteert moet in de groepering staan of in een aggregatiefunctie. Voor een JSON-kolom kies je jsonb en niet json, anders kun je er geen index op leggen. Bij een migratie van MySQL naar PostgreSQL komen die verschillen als eerste boven.

Wat wij met PostgreSQL doen

Wij bouwen maatwerk Laravel applicaties op PostgreSQL en nemen bestaande applicaties over die er al op draaien. Daar hoort het ontwerp van het datamodel bij, het opsporen van trage queries en het instellen van back-ups waarvan het herstel getest is.

Het afsprakenplatform 1Kapper draait op PostgreSQL, met duizenden afspraken per dag die elkaar niet mogen overlappen.