pg_cancel_backend() doesn't abort a transaction

Поиск
Список
Период
Сортировка
От Andrei Zhidenkov
Тема pg_cancel_backend() doesn't abort a transaction
Дата
Msg-id CAKtDQ6D8m6MGjaMdXKv5p3PNbDSHGEPp_mieWOxAY9j_0WVdgQ@mail.gmail.com
обсуждение исходный текст
Ответы Re: pg_cancel_backend() doesn't abort a transaction  ("David G. Johnston" <david.g.johnston@gmail.com>)
Список 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 по дате отправления:

Предыдущее
От: Fan Liu
Дата:
Сообщение: RE: [Bus error] huge_pages default value (try) not fall back
Следующее
От: "David G. Johnston"
Дата:
Сообщение: Re: pg_cancel_backend() doesn't abort a transaction