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.