public inbox for [email protected]
help / color / mirror / Atom feedFrom: Torsten Förtsch <[email protected]>
To: Laurenz Albe <[email protected]>
Cc: anlex N <[email protected]>
Cc: [email protected]
Subject: Re: Is postgresql's json strong consistency or eventually consistency?
Date: Fri, 24 Jan 2025 11:40:10 +0100
Message-ID: <CAKkG4_=a01yfmkjPgpU3h=QMcmo=q+9RcXvFV+p5Yv7kdyjkBw@mail.gmail.com> (raw)
In-Reply-To: <[email protected]>
References: <CAGqGHCNs_OWZjhNghiaENCLdRF3g7zc4cCegRcYwB1RFLKVf8g@mail.gmail.com>
<[email protected]>
On Thu, Jan 16, 2025 at 2:02 PM Laurenz Albe <[email protected]>
wrote:
> On Thu, 2025-01-16 at 15:25 +0300, anlex N wrote:
> > I have searched all archives, but have no results. Please help me.
>
> That's probably because the question doesn't make much sense.
> A single PostgreSQL instance (=cluster) enforces consistency,
> and it doesn't matter which data type you are using.
>
> So I guess the answer should be "strong consistency".
I guess what the original author was trying to ask is how many databases
have to acknowledge a transaction before it is considered committed, stuff
that's called in mongodb write_concern and read_concern.
@anlex, PG at its heart is not a distributed system. When you talk about
consistency in PG you normally mean foreign key consistency or similar,
properties where data in one table is somehow related to data in another
table. A slightly different meaning of consistency comes when you talk
about transaction isolation levels.
All of this is different from Mongodb's read/write consistency. In Mongodb
a write can go to one machine while the subsequent read can fetch data from
another. So, you worry about linearizability, causal consistency and such
things. The only slightly similar question in PG is "Can I see data
somehow, on the master or a replica, that has been written to the database
but where the master has not yet acknowledged the commit to the client?"
The short answer is, yes. As soon as the commit record has been written to
the WAL, it is being transferred and replayed on streaming replicas. After
that the master might still have to do things like waiting for a
synchronous replica to acknowledge the transaction before the transaction
becomes visible on the master. On a fast enough replica, the transaction
can, hence, become visible before it's visible on the master.
https://foertsch.cc/en/postgres/commit-timing
You can control that behavior with the `synchronous_commit` setting in
combination with `synchronous_standby_names`. You can tell the DB, for
instance, a transaction should be considered as committed only when 3 out
of 5 replicas have acknowledged it.
If you set synchronous_commit=remote_apply and configure N out of N
replicas in synchronous_standby_names, that would likely give you a
distributed database with strong consistency where you can direct writes to
the master and read-only load to the replicas. But I guess nobody in his
right mind would do that unless your database is rarely written to.
view thread (6+ messages)
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected], [email protected], [email protected], [email protected]
Subject: Re: Is postgresql's json strong consistency or eventually consistency?
In-Reply-To: <CAKkG4_=a01yfmkjPgpU3h=QMcmo=q+9RcXvFV+p5Yv7kdyjkBw@mail.gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox