Hey, Threadiverse! I’m looking for informed opinions on database choices.
I can stand up an Internet-facing application and have it use either MySQL or PostgreSQL. Which is the better choice, and why do you think so?
Thanks!
Postgres, hands down. It’s far better than MySQL in every way.
Postgres. It’s more strict by default, which leads to a lot fewer surprises.
Here’s my rule of thumb:
- SQLite - if it’s enough
- Postgres
- MariaDB - if you don’t care about your data and just want the thing to work
- MySQL - if you sold your soul to Oracle, but still can’t afford their license fee
- Something else - you’re a hipster or have very unique requirements
The answer is impossible to answer until you tell us more about your needs. Better choice considering what?
In general, untill you have terabytes of data or a significant amount of traffic (operations per second) database choice does not matter and you should be using cheaper option, where the cost should be assessed as a derivative of price of hosting, cost per operation, cost to deliver (how familiar you are with it).
When you have significant amount of data or traffic - only then you should worry about database kind or language. Until then this could be a premature optimization.
I have historically gone with PostgreSQL and had no complaints. The licensing issues concerning MySQL also give one pause (Oracle are greedy bastards who will use any excuse to extract money from captive customers, so depending on their properties is to be avoided). Having said that, these days, SQLite is probably sufficient for many workloads and has the advantage of not requiring a database server.
Postgres is far superior in every way.
We used MySQL (and Percona XtraDB) servers at work, and it is so bad. So I made several presentations showing generic and specific reasons why Postgres is better. I had to cut a lot of content because MySQL is just that bad.
Some things may not seem relevant now, but as you keep the DB around long enough, you will appreciate the whole package of Postgres.
Things that will help a lot, but are extensions:
- pg_partman - for automatic partition management
- patroni - management of replicas, automatic failover - it does everything for you with simple commands
There is a DB comparison matrix, but hasn’t been updated in over a year, which is a shame, but still gives you the idea of how different databases support SQL features: link.
Spoiler: postgres has the most support, with a huge lead
Edit: MySQL is dead last, btw
I’d choose which ever one is not PostgreSQL.
Then you’d be wrong. Unless you pick SQLite and that’s all you need.
As someone that admins hundreds of MySQL at work, I’d go with PostgreSQL.
Yeah, every time I find some weird annoying behavior or some missing feature in MySQL, PostgreSQL is doing it right.
That said, also ask yourself if you really need a relational database, or whether an object store or append-only / timeseries db would fit better.
Same.
Postgres is a more robust and better designed and developed product, also it’s not owned by fucking Oracle.
As somebody who just watched a team implement MySQL for an app that only supported Postgres, I’d go with Postgres.
I never want to use MySQL again. Postgres or SQLite for relational databases.
Ha! My deepest experience with postgres was watching it fall over and wedge daily when run behind red hat’s satellite (the flailing lame foreman one, not spacewalk).
Wow, was it ever a dog. Yeah, I get it: the company who shat Systemd on the planet can’t be asked to do much better, but still.
So, you fucked up and it’s postgres’ fault?
PostgreSQL is just better. It’s supports transactions on DDL (things like altering table structure) and enforces unique constraints after transactions complete … so you can actually do a bunch of important stuff (like update your table structure or swap unique values between rows) safely.
Another vote for Postgres, MySQL kind of blows.
Postgres also had the advantage of great support for JSON elements, which gives you the power of a no-sql system like mongo in the package. A major selling point if your schema is evolving.
Most applications can do just fine with SQLite, but if you need something with a lot more write speed, go with PostgreSQL.
You aren’t exposing the database right?
Choosing is not so much about whether it’s internet facing or not. From the programmer’s perspective and an administrator’s perspective there are pros and cons to both. As someone looking to self-host, if you want to run a service that works with either, I would make the choice based on what seems the most supported, or which one you feel the most comfortable looking up and performing administrative tasks on. I tend to use postgresql more just because I have more experience with it and can recommend it if that’s what you need, but mysql can be just as good or better in many circumstances. Pick whichever one looks easier to you.