Re: BUG #17434: CREATE/DROP DATABASE can be executed in the same transaction with other commands

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Cc: Yugo NAGATA <nagata@sraoss.co.jp>, pgsql-hackers@postgresql.org, "David G. Johnston" <david.g.johnston@gmail.com>, Bruce Momjian <bruce@momjian.us>
Date: 2022-11-09T16:38:05Z
Lists: pgsql-bugs, pgsql-hackers
Peter Eisentraut <peter.eisentraut@enterprisedb.com> writes:
> This has broken the following use:

> parse: create temporary table t1 (a int) on commit drop
> bind
> execute
> parse: analyze t1
> bind
> execute
> parse: select * from t1
> bind
> execute
> sync

> I think the behavior of IsInTransactionBlock() needs to be further 
> refined to support this.

Hmm.  Maybe the right way to think about this is "if we have completed an
EXECUTE, and not yet received a following SYNC, then report that we are in
a transaction block"?  But I'm not sure if that breaks any other cases.

			regards, tom lane



Commits

  1. Rethink handling of [Prevent|Is]InTransactionBlock in pipeline mode.

  2. Doc: add comments about PreventInTransactionBlock/IsInTransactionBlock.

  3. Force immediate commit after CREATE DATABASE etc in extended protocol.