COMMIT AND CHAIN in implicit block leaves blockState as TBLOCK_STARTED, which doesn't trigger the chaining. but ROLLBACK AND CHAIN sets the blockState into TBLOCK_ABORT_PENDING, so the chaining is triggered.
I think disabling s->chain beforehand should do the desired behavior. 2019年8月25日(日) 18:11 Fabien COELHO <coe...@cri.ensmp.fr>: > > > The following bug has been logged on the website: > > > > Bug reference: 15977 > > Logged by: mtlh kdvt > > Email address: emuser20140...@gmail.com > > PostgreSQL version: 12beta3 > > Operating system: Windows > > Description: > > > > When a ROLLBACK AND CHAIN command is executed in the implicit transaction > > block, a new transaction will be started: > > db=# ROLLBACK AND CHAIN; > > WARNING: there is no transaction in progress > > ROLLBACK > > db=# ROLLBACK AND CHAIN; > > ROLLBACK > > > > However, a COMMIT AND CHAIN command won't start a new transaction: > > db=# COMMIT AND CHAIN; > > WARNING: there is no transaction in progress > > COMMIT > > db=# COMMIT AND CHAIN; > > WARNING: there is no transaction in progress > > COMMIT > > Thanks for the report. > > Indeed, I confirm, and I should have caught this one while reviewing… > > Doc says: > > "If AND CHAIN is specified, a new transaction is immediately started with > the same transaction characteristics as the just finished one. Otherwise, > no new transaction is started." > > If there is no transaction in progress, the spec is undefined. Logically, > ITSM that there should be no tx reset if none was in progress, so ROLLBACK > has the wrong behavior? > > A quick glance at the code did not yield any obvious culprit, but maybe > I'm not looking at the right piece of code. > > Doc could happend ", if any" to be clearer. > > -- > Fabien.
disable_implicit_xact_chaining.patch
Description: Binary data