Re: Feature suggestions: "dead letter"-savepoint.

From: Terje Elde <terje(at)elde(dot)net>
To: Marko Tiikkaja <marko(at)joh(dot)to>
Cc: pgsql-hackers(at)postgresql(dot)org
Subject: Re: Feature suggestions: "dead letter"-savepoint.
Date: 2016-06-23 10:48:20
Message-ID: F533C948-F425-476B-B1EF-6822D95A9F83@elde.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


> On 23 Jun 2016, at 11:50, Marko Tiikkaja <marko(at)joh(dot)to> wrote:
>
> Comparing these two; how is the latter any better? It's the same number of commands, except it's holding a transaction open for longer, it's using a non-standard concept and it's arguably more complex.

Same number of commands, but half the number of transactions/commits. It’s holding the transaction open for longer, but not necessarily very long. It’s also not holding any contested locks (in the example at least).

It is arguably more complex, but also arguably (imho anyway) simpler. It gives a generic pattern of saying “I want this to happen if things go bad”. With the upper example, you spend time setting up a system or pattern specifically for the use-case. With patterns such as using a column to mark ownership of a row to your process, you’d need that extra column. With a large number of rows, and a low probability of actually needing to update the row, that could also result in significant update-traffic, that could be avoided. Similar if you’d need to keep a lock on another table as well, you’d loose the lock between the first and second transaction. You could work around that with using ownership-type columns on that table as well, but then you have update-traffic there too. Not to mention that for any use of ownership-type columns, you run the risk of having to do housekeeping on them, versus the second example, where you’re sure that all locks get cleaned up.

I entirely agree though, that this does in no way allow you to solve any new problems, that you can’t solve today.

Part of the reason I like the idea, is that it lowers the threshold for and work involved in dropping in “If what I’m about to do goes badly, I want X to happen”. Yeah, it’s often comparable to simply do X first, and revert or alter it later, but that easily leads to twice the commits, loss of locks, having to work around that, possibly introducing even more update-traffic in the process. I just see a potential to both avoid that, and gain some developer-comfort at the same time, so I figured I should pitch the idea.

One could easily argue that session-level advisory locks could often be used to avoid the issues of loosing locks across the two transactions, and it wouldn’t be wrong. It just moves the question back to complexity though, of which there would be more (imho).

Terje Elde

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Craig Ringer 2016-06-23 12:31:57 Re: Feature suggestions: "dead letter"-savepoint.
Previous Message alain radix 2016-06-23 10:22:30 Re: Requesting external_pid_file with postgres -C when not initialized lead to coredump