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.