pg_cancel_backend() doesn't abort a transaction - Mailing list pgsql-bugs

From Andrei Zhidenkov
Subject pg_cancel_backend() doesn't abort a transaction
Date
Msg-id CAKtDQ6D8m6MGjaMdXKv5p3PNbDSHGEPp_mieWOxAY9j_0WVdgQ@mail.gmail.com
Whole thread Raw
Responses Re: pg_cancel_backend() doesn't abort a transaction  ("David G. Johnston" <david.g.johnston@gmail.com>)
List pgsql-bugs
Hi, list members

In PostgreSQL source code there is a commentary for StatementCancelHandler() function which says: "Query-cancel signal from postmaster: abort current transaction at soonest convenient time". I think that's not true when using a savepoint:

Session 1:

BEGIN; -- #1
    UPDATE dev.test SET status = 'y' WHERE foo = 1; -- #2
    SAVEPOINT my_savepoint; -- #3
    UPDATE dev.test SET status = 'z' WHERE foo = 2; -- #6
ROLLBACK TO SAVEPOINT my_savepoint; -- #9
COMMIT; -- #10

Session 2:

BEGIN; -- #4
SELECT * FROM dev.test WHERE foo = 2 FOR UPDATE; -- #5
ROLLBACK; -- #8

Session 3:

SELECT pg_cancel_backend(xxx); -- #7 , xxx is the pid of #6 query

The result is that status = 'y' WHERE foo = 1 , so Session 1 committed the transaction successfully. I am missing something or the commentary is vague?

P.S. It's not clear from the documentation whether pg_cancel_backend() aborts transaction or not.

With best regards, Andrei Zhidenkov.

pgsql-bugs by date:

Previous
From: Fan Liu
Date:
Subject: RE: [Bus error] huge_pages default value (try) not fall back
Next
From: "David G. Johnston"
Date:
Subject: Re: pg_cancel_backend() doesn't abort a transaction