Re: Cancelling idle in transaction state
Simon Riggs <simon@2ndquadrant.com>
From: Simon Riggs <simon@2ndQuadrant.com>
To: Joachim Wieland <joe@mcknight.de>
Cc: Tom Lane <tgl@sss.pgh.pa.us>, Hannu Krosing <hannu@2ndquadrant.com>, James Pye <lists@jwp.name>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2009-12-31T11:10:35Z
Lists: pgsql-hackers
On Thu, 2009-12-24 at 21:38 +0100, Joachim Wieland wrote: > On Sun, Dec 6, 2009 at 4:23 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > We are using NOTICE, not NOTIFY, assuming that we use anything at all > > (which I still regard as unnecessary). Please stop injecting confusion > > into the discussion. > > Attached is a minimal POC patch that allows to cancel an idle > transaction with SIGINT. The HS patch also allows this in its current > form but as Simon points out the client gets out of sync with it. > > The proposal is to send an additional NOTICE to the client and abort > all open transactions and subtransactions (this is what I got from the > previous discussion). This all works and I'm looking to post a reviewed patch soon. > I had to write an additional function AbortAnyTransaction() which > aborts all transactions and subtransactions and leaves the transaction > in the aborted state, is there an existing function to do this? My use of AbortOutOfAnyTransaction() was what caused the problem-I-couldn't-solve. It aborted too far, confusing clients. Joachim's function does the right thing and leaves the transaction state correctly, so that clients don't get confused. Problem solved, thanks Joachim. -- Simon Riggs www.2ndQuadrant.com