MySQL and PostgreSQL are both serious databases. Laravel speaks both. The mistake is choosing from a logo, or from whatever one-click image the host installed last year.
Where to host Nuxt and Laravel is about the machine and the region. This article is about the engine on that machine.
MySQL is a sound default
Users, orders, bookings with simple uniqueness, admin lists: a relational MySQL 8 schema does that work. If the rules you need are primary keys, foreign keys, and unique columns, you do not need a migration to feel current. Pick the engine your host can back up and restore, and stay there until a real constraint shows up.
PostgreSQL when the database must enforce more
Reach for PostgreSQL when the schema itself has to say something MySQL will not:
- Overlapping ranges. A court, room, or person cannot have two bookings that overlap. PostgreSQL exclusion constraints are built for that. A unique index on a start time is enough only when slots cannot overlap by construction.
- JSON you query. JSONB can be indexed. Use it when the document shape is part of the query, not a blob PHP parses because the columns were never designed. MySQL has a JSON type. It is not the same tool. We will not pretend a benchmark we did not run.
- Search in the database. Full-text, and later vector search, can live next to the rows. That is a reason to prefer PostgreSQL for a catalog that will need them. It is not a reason to migrate a simple CRUD app in October.
PostgreSQL 18, released 25 September 2025, added asynchronous I/O. io_method defaults to worker. The release announcement and the runtime settings are the source. That is current-major behavior. It is not, by itself, a reason to change engines.
A choice we can defend
| You need | Lean toward |
|---|---|
| Ordinary relational Laravel data, and a host that already restores MySQL | Stay on MySQL |
| Overlapping times, JSON you actually query, or database search | PostgreSQL |
| “The tutorial used MySQL” | Not a requirement |
We do not publish a speed table. Numbers from someone else’s hardware are not your data.
Straight next step
Send the rules the schema has to enforce — overlap, money, stock, or “just rows.” We will name an engine. We will not switch you for the logo.



