By most measures, PostgreSQL and other members of the Postgres family are superior database management systems to MySQL. They're more functional, more scalable, and easier to program. Even so, MySQL has much more market/mind share than Postgres, and the reasons aren't solely mass insanity.
Let's start by reviewing some of the leading knocks against MySQL:
- MySQL 4 and any version of MySQL over the MyISAM storage engine are missing some basic SQL standard transactional capability. They should not be used for serious DBMS applications.
- InnoDB, the usual transactional storage engine for MySQL, is of dubious scalability. What's more, it's now owned by Oracle.
- Falcon, the replacement transactional storage engine for MySQL, isn't generally available yet. When it does come out, it will be immature.
- Analytic functionality (even some basic kinds of join) has been problematic in MySQL.
But there are also some strong plusses on MySQL's ledger:
- Many applications -- including Wordpress, on which I run all my blogs except this one -- are only available on MySQL. (I would guess that this blog, which runs on Drupal, also runs over MySQL, but I haven't asked.)
- MySQL is easy to set up.
- Many people know how to run MySQL.
- Some Very Large Web Databases run on MySQL.
- Speciality data warehouse engines (e.g., Infobright Brighthouse, Kickfire) have been developed for MySQL.
As for Postgres:
- PostgreSQL has been around for a long time. It has a large fraction of the features market-leading DBMS have, and in fact was the original research testbed for many of them.
- EnterpriseDB's Postgres Plus adds more cool features, some free and some chargeable, including Oracle compatibility.
- There are Postgres-specific data warehouse engines too.
Frankly, I like advanced DBMS features, such as robust support for various kinds of datatype. So whenever it makes reasonable sense, I'd favor using the Postgres family.
Related links:
- An argument for Postgres over MySQL ...
- ... and a rebuttal
- A Slashdot debate on MySQL vs. Postgres (with a little Firebird thrown in)
- Four reasons to reduce your Oracle usage
- Coverage of MySQL
- Coverage of PostgreSQL and Postgres Plus (which overlaps a lot)
- Coverage of Infobright