
The recently announced Uber’s blog post, entitled “ Why Uber Engineering Switched from Postgres to MySQL [1]”, is a huge issue at PostgreSQL communities, but also other developer communities. This post was described in detail for the reason why Uber switched its own storage system from PostgreSQL to MySQL. The famous PG contributors[2][3] and bloggers[4] are currently expressing their opinions, and the developers of Y Combinator Hackers News[5][6][7] and reddit [8] are also discussing it. Besides many threads are generated even at PG Mailing List[9][10].
Sharing its own technical details at the world-famous company such as Uber is the activity of great worth. Migrating from PostgreSQL to MySQL may be a negative on PG communities, but their reactions are stable. However, they are discussing variously since the comparison contents of Uber’s post based on PostgreSQL 9.2.
Several confusions and questionsBecause the decision of Uber is highly influential, it gives an inaccurate impression to people that MySQL is better than PostgreSQL. However, they are the databases with a long history, and the several differences only exist as they have their own development concepts.
Database is a synthesis of each tradeoff, and the purpose for using each database and the choice of it by the workload are very important, except for the comparison. The cause of hot argument is that Uber has a nuance – either one is better between both databases, not reasonably technical comparison. There are people who ask whether PG is a real pool by reading Uber’s post[4]. In other words, they didn’t understand the tradeoff of each database due to the nuance, so might misinterpret as a database is better than the other.
PostgreSQL 9.6 right nowWe are not saying that there’s something wrong with the Uber’s posting. When Uber used PostgreSQL 9.2, it had the constraints on performance by unsupported features. But Uber didn’t mention how they tried an optimization, so misunderstanding – PostgreSQL is ineffective is not a good attitude just by Uber’s post. PostgreSQL is currently version 9.6 that has improved a lot, and now it is continuously evolving.
For example, Uber’s post described the tuple update of PostgreSQL and index structure for relatively large plenty of that. An increasing the write instruction by Multi-Version Concurrency Control (MVCC) model is acknowledged even at PG communities. However, all architectures have each tradeoff. The architecture of MySQL is worse for READ than PostgreSQL’s. Uber said that it isn’t a big overhead, but READ operations may cause difference situationally.
In addition, Uber absolutely didn’t mention HOT tuple optimizing the write instruction, while it exactly described a collection of organized tuples. Therefore, Uber’s workload had a high proportion of updates even if Uber used HOT tuple, but it can’t control the performance of updates if not a heavy workload like Uber.
Point out the replicaIndications of replicas are also due to the increasing phenomenon of the write instruction. That is, WAL log and bandwidth are increased, so replication became more difficult in a situation limiting the network bandwidth such as a replica between data centers. Uber said that they are using the indexes, and WAL log for replica will increase as numerous as indexes.
As stated above, the matters pointed out by Uber mostly occur in a significant of Uber data processing architecture’s workload. Thus, it’s wrong to judge the database regardless of specific situation. Uber considered that PostgreSQL’s architecture is inefficient since it was using several indexes per a table and the replica between data centers. Of course, if it used an optimization of PostgreSQL, the inefficiency would be mitigated to some degree.
Uber’s stance and SchemalessThe system really mentioned by Uber is back-end storage of the system called Schemaless and it used MySQL/InnoDB. Uber needed the expandable system depending on the development speed of business and embodied in Schemaless. So, as Markus Winand points out , the post should present that MySQL/InnoDB was a better choice as back-end storage of Schemaless. This is considered in the same vein as appearance of NoSQL due to the limits of expandability of existing relational databases.
ConclusionAs mentioned earlier, the reactions of PG communities are pretty temperate. They acknowledge PostgreSQL’s shortcoming and are discussing new features. So we could hardly see that they point out Uber’s post or have the heated dispute. The users of Hacker News value their responses and finding the direction of development will make PostgreSQL to better database. If Uber shared and consulted the situation with PG communities before switched to MySQL, it might find a more highly available solution also in PostgreSQL.
[Links] [1] Why Uber Engineering Switched From Postgres To MySQL, https://eng.uber.com/mysql-migration/ [2] Robert Hass (EnterpriseDB), http://rhaas.blogspot.com/2016/08/ubers-move-away-from-postgresql.html [3] Markus Winand, http://use-the-index-luke.com/blog/2016-07-29/on-ubers-choice-of-databases [4] Simon Riggs (2ndQuadrant), http://blog.2ndquadrant.com/thoughts-on-ubers-list-of-postgres-limitations/ [5] Hackers News https://news.ycombinator.com/item?id=12201353 [6] Hackers News https://news.ycombinator.com/item?id=12166585 [7] Hackers News https://news.ycombinator.com/item?id=12216680 [8] Reddit https://www.reddit.com/r/programming/comments/4uph84/why_uber_engineering_switched_from_postgres_to/ [9] PG hackers http://postgresql.nabble.com/Why-we-lost-Uber-as-a-user-td5913417.html [10] PG advocacy http://postgresql.nabble.com/Uber-moving-towards-MySQL-td5913472.html [11] Uber Schemaless https://eng.uber.com/schemaless-part-one/
Common questions
Did Uber stop using PostgreSQL entirely?
No. The 2016 post described migrating one datastore to a MySQL-backed system called Schemaless. Uber continued running PostgreSQL elsewhere in its infrastructure.
Is MySQL faster than PostgreSQL for high write volume?
It depends on schema, update pattern, and configuration of both systems. Uber's experience with one workload is not a general benchmark, and either database can perform well or poorly depending on index design, connection pooling, and hardware.
Are the problems Uber described still present in current PostgreSQL?
Some were already mitigated at the time by features like HOT updates, and PostgreSQL has continued improving vacuum, replication, and upgrade paths since. Check current PostgreSQL release notes for the specific behavior in question rather than assuming an old blog post still applies.
What replaced Apache Sqoop for moving data into Hadoop or a data warehouse?
Change-data-capture tools such as Debezium combined with Kafka Connect, or managed ingestion services from cloud data platforms, are the common current approach. Sqoop itself is retired and sits in the Apache Attic.
Should I index a jsonb column with jsonb_ops or jsonb_path_ops?
Use jsonb_ops, the default, if you need key-existence operators like ? or ?&. Use jsonb_path_ops if your queries only ever use containment with @> and you want a smaller, typically faster index.
Sources
About this page
Last reviewed October 30, 2026 by the Nine Bits editors. Read our editorial policy or report an error.