3 ms·
Yeah, basically with PostgreSQL it boils down to the fact that even if a client receives an error on commit, its writes may in fact have succeeded -- and it can
by lomnakkus 11y ago
Yeah, basically with PostgreSQL it boils down to the fact that even if a client receives an error on commit, its writes may in fact have succeeded -- and it cannot assume that they haven't. (Since the final "ack" that everything went well may not make it.)
As an example: This means that idempotency is really important if you're doing any kind of retries on commit failure.
EDIT: Another example: If you're doing application-level optimistic concurrency control (using e.g. an incrementing version number) you can end up in a situation where an update appears to conflict with itself. Usually, though, this isn't a big concern since client<->server paritions are usually catastrophic anyway.
(Off the top of my head that's what I can recall -- there may be other things to be gleaned from the original article.)
[1] At least for all practical purposes.
- biokoda 11y ago> Yeah, basically with PostgreSQL it boils down to the fact that even if a client receives an error on commit, its writes may in fact have succeeded -- and it cannot assume that they haven't. This is true for almost every database. Otherwise they would require a distributed transaction between the client and server.
- lomnakkus 11y agoIndeed, but given that we were talking about $DISTSYS vs. $CONCRETE_THING, I just mentioned the $CONCRETE_THING by name. You are of course technically right... which is the best kind of right! :)