Hacker News new | past | comments | ask | show | jobs | submit login

I prefer PostgreSQL. The fact that it doesn't have many of MySQL's limitations is a big plus. Just he ability to add a column on a large table without locking the thing for a huge amount of time would be great for us. PostgreSQL can also use multiple indexes which, again, is a serious plus. The error messages that PostgreSQL returns can be much more informative than MySQL. At times when you screw up a query instead of "this is impossible" or "you can't do that", you get something more akin to "this is impossible because of X". Again, this is just my impression. Basically, PostgreSQL feels more like an open source Oracle (a grown up database) than MySQL (which doesn't feel very Oracle-y).

Now the tools are MUCH less friendly, but if you come from an Oracle (or probably DB2) world you'll be used to it. While they require more cryptic commands, they do work very well.

There is the replication thing. When we picked PostgreSQL back up this year to play with for a new little system, we discovered that they took one of the formerly external replication systems and it has been put into the tree. This is a very good step, as the replication situation was a big problem for us. Before there were little third party things (based on triggers) that you could take your chances with, and there were paid replication solutions. Having one built in is quite nice.




PostgreSQL forces you to write proper queries. MySQL is designed to accommodate lousy practices, and all those implicit type conversions and non-standard syntax will come back to bite you as a big WTF.

Other reasons I like PostgreSQL: more data types (MySQL doesn't even have a boolean type), partial indexing (a godsend when you have large tables), ability to use multiple indexes when querying, full-text search and ACID are not mutually exclusive, and multiple procedural languages.

[edit] Oops, didn't mean to make this a reply.


This. I was appalled when I realized that MySQL will quietly seem to execute

  select x from y group by z
x isn't a grouping column or an aggregate function, so where does it get the value for each group? It just arbitrarily picks a value from one of the rows, even if the other rows had different values!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: