Why Uber dropped PostgreSQL
Why Uber dropped PostgreSQL
Posted Aug 11, 2016 7:50 UTC (Thu) by ringerc (subscriber, #3071)In reply to: Why Uber dropped PostgreSQL by brong
Parent article: Why Uber dropped PostgreSQL
MySQL works around this somewhat by special-casing some functions, like now(). It evaluates them on the master and stores the results in the binlog, then ensures the invocations on the replica(s) return the same results as the master.
PgPool-II for PostgreSQL does something similar in statement based replication mode.
Clever, but solves only narrow cases. For example, in MySQL SYSDATE() still doesn't work safely. So you have to code very carefully to avoid breakage. (See https://dev.mysql.com/doc/refman/5.7/en/replication-featu...) .
By contrast, PostgreSQL's block-level replication leaves the replica an identical copy.
That's why in practice the most practical MySQL replication option is row-based replication or hybrid row/statement based replication. Many people who are talking about "statement based" replication here are really thinking of row-based replication, or the MIXED replication mode that MySQL can use to hybridize the two. Rather cleverly, I must say. ( https://dev.mysql.com/doc/refman/5.7/en/replication-forma..., https://dev.mysql.com/doc/refman/5.7/en/binary-log-mixed.... ).
That's what I'm involved in working on for PostgreSQL too, at 2ndQuadrant, in the form of BDR and pglogical. There's ongoing work to get this into PostgreSQL core. Though we're not planning on any sort of mixed replication mode at this point.