public inbox for [email protected]  
help / color / mirror / Atom feed
From: Adrian Klaver <[email protected]>
To: Siddharth Jain <[email protected]>
To: Tom Lane <[email protected]>
Cc: David G. Johnston <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: Question regarding how databases support atomicity
Date: Tue, 7 May 2024 10:15:23 -0700
Message-ID: <[email protected]> (raw)
In-Reply-To: <CAPqV3pTe+b3Q44jdvhAtZNnroteRLp7kHFLvWFypu0JDwtaYjA@mail.gmail.com>
References: <CAPqV3pRO=u1Mno06WLCFxoyxbzkYTetiqTs7WaW=_fkjRPgYhw@mail.gmail.com>
	<CAPqV3pQquw63Fv_fCJzAAnUWk86qHfg1cH=+mJ2N=4LGdDyrNw@mail.gmail.com>
	<CAKFQuwb2MtE02QgMQ3vvLOj7bvGMar6qwnigCBBaYLBKsdk3xg@mail.gmail.com>
	<[email protected]>
	<CAPqV3pTe+b3Q44jdvhAtZNnroteRLp7kHFLvWFypu0JDwtaYjA@mail.gmail.com>



On 5/7/24 9:48 AM, Siddharth Jain wrote:
> Thanks All for the kind responses. I understand how MVCC takes care of 
> atomicity for updates to rows. I was developing a project where lets say 
> data for each table is stored in its own folder together with metadata 
> (we are not talking postgres now). So if I have two tables A and B I 
> have a folder structure like:
> A
> \_ metadata.json
> B
> \_ metadata.json
> Now if I want to rename a table, I need to move the folder and also 
> update metadata accordingly. These are two separate operations but need 
> to be done atomically - all or none. in this case it is possible that we 
> succeed in renaming the folder but fail to update metadata for whatever 
> reason. then if we try to undo the folder rename we get another failure 
> for whatever reason. how to deal with such scenarios? are there no such 
> scenarios in postgres?

The only thing I can think of is creating a function in one of the 
untrusted languages plpython3u or plperlu to do the renaming. Then in 
say plpython3u case wrap the actions in try/except block. On a failure 
take the appropriate undo action.

> 
> 
> On Fri, May 3, 2024 at 8:29 PM Tom Lane <[email protected] 
> <mailto:[email protected]>> wrote:
> 
>     "David G. Johnston" <[email protected]
>     <mailto:[email protected]>> writes:
>      > On Friday, May 3, 2024, Siddharth Jain <[email protected]
>     <mailto:[email protected]>> wrote:
>      >> The way I understand this is that if there is a failure
>     in-between, we
>      >>> start undoing and reverting the previous operations one by one.
> 
>      > Not in PostgreSQL.  All work performed is considered provisional
>     until a
>      > commit succeeds.  At which point all provisional work, which had been
>      > tagged with the same transaction identifier, becomes reality to
>     the rest of
>      > the system, by virtue of marking the transaction live.
> 
>     Right.  We don't use UNDO; instead, we use multiple versions of
>     database rows (MVCC).  A transaction doesn't modify the contents
>     of existing rows, but just marks them as provisionally outdated, and
>     then inserts new row versions that are marked provisionally inserted.
>     Other transactions ignore the outdate markings and the uncommitted new
>     rows, until the transaction commits, at which time the new versions
>     become live and the old ones become dead.  If the transaction never
>     does commit -- either through ROLLBACK or a crash -- then the old row
>     versions remain live and the new ones are dead.  In either case, we
>     don't have a consistency or correctness problem, but we do have dead
>     rows that must eventually get vacuumed away to prevent indefinite
>     storage bloat.  That can be done by background housekeeping processes
>     though (a/k/a autovacuum).
> 
>     I believe Oracle, for one, actually does use UNDO.  I don't know
>     what they do about failure-to-UNDO.
> 
>                              regards, tom lane
> 

-- 
Adrian Klaver
[email protected]






view thread (4+ 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], [email protected]
  Subject: Re: Question regarding how databases support atomicity
  In-Reply-To: <[email protected]>

* 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