postgresql/src/include/access
Tom Lane 20432f8731 Rethink handling of [Prevent|Is]InTransactionBlock in pipeline mode.
Commits f92944137 et al. made IsInTransactionBlock() set the
XACT_FLAGS_NEEDIMMEDIATECOMMIT flag before returning "false",
on the grounds that that kept its API promises equivalent to those of
PreventInTransactionBlock().  This turns out to be a bad idea though,
because it allows an ANALYZE in a pipelined series of commands to
cause an immediate commit, which is unexpected.

Furthermore, if we return "false" then we have another issue,
which is that ANALYZE will decide it's allowed to do internal
commit-and-start-transaction sequences, thus possibly unexpectedly
committing the effects of previous commands in the pipeline.

To fix the latter situation, invent another transaction state flag
XACT_FLAGS_PIPELINING, which explicitly records the fact that we
have executed some extended-protocol command and not yet seen a
commit for it.  Then, require that flag to not be set before allowing
InTransactionBlock() to return "false".

Having done that, we can remove its setting of NEEDIMMEDIATECOMMIT
without fear of causing problems.  This means that the API guarantees
of IsInTransactionBlock now diverge from PreventInTransactionBlock,
which is mildly annoying, but it seems OK given the very limited usage
of IsInTransactionBlock.  (In any case, a caller preferring the old
behavior could always set NEEDIMMEDIATECOMMIT for itself.)

For consistency also require XACT_FLAGS_PIPELINING to not be set
in PreventInTransactionBlock.  This too is meant to prevent commands
such as CREATE DATABASE from silently committing previous commands
in a pipeline.

Per report from Peter Eisentraut.  As before, back-patch to all
supported branches (which sadly no longer includes v10).

Discussion: https://postgr.es/m/65a899dd-aebc-f667-1d0a-abb89ff3abf8@enterprisedb.com
2022-12-13 14:23:58 -05:00
..
amapi.h Revert changes in HOT handling of BRIN indexes 2022-06-16 15:02:49 +02:00
amvalidate.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
attmap.h Add 'missing_ok' argument to build_attrmap_by_name 2022-11-29 09:39:36 +01:00
attnum.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
brin.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
brin_internal.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
brin_page.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
brin_pageops.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
brin_revmap.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
brin_tuple.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
brin_xlog.h Change internal RelFileNode references to RelFileNumber or RelFileLocator. 2022-07-06 11:39:09 -04:00
bufmask.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
clog.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
commit_ts.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
detoast.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
genam.h Harmonize parameter names in storage and AM code. 2022-09-19 19:18:36 -07:00
generic_xlog.h Harmonize parameter names in storage and AM code. 2022-09-19 19:18:36 -07:00
gin.h Convert *GetDatum() and DatumGet*() macros to inline functions 2022-09-27 20:50:21 +02:00
gin_private.h Harmonize parameter names in storage and AM code. 2022-09-19 19:18:36 -07:00
ginblock.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
ginxlog.h Change internal RelFileNode references to RelFileNumber or RelFileLocator. 2022-07-06 11:39:09 -04:00
gist.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
gist_private.h Standardize rmgrdesc recovery conflict XID output. 2022-11-17 14:55:08 -08:00
gistscan.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
gistxlog.h Standardize rmgrdesc recovery conflict XID output. 2022-11-17 14:55:08 -08:00
hash.h Speedup hash index builds by skipping needless binary searches 2022-11-24 17:21:44 +13:00
hash_xlog.h Standardize rmgrdesc recovery conflict XID output. 2022-11-17 14:55:08 -08:00
heapam.h Variable renaming in preparation for refactoring 2022-11-16 16:40:34 +01:00
heapam_xlog.h Standardize rmgrdesc recovery conflict XID output. 2022-11-17 14:55:08 -08:00
heaptoast.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
hio.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
htup.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
htup_details.h Harmonize heapam and tableam parameter names. 2022-09-19 16:46:23 -07:00
itup.h Convert macros to static inline functions (itup.h) 2022-07-19 07:24:55 +02:00
multixact.h Harmonize heapam and tableam parameter names. 2022-09-19 16:46:23 -07:00
nbtree.h Add missing parenthesis to max item size macro. 2022-08-05 13:06:19 -07:00
nbtxlog.h Standardize rmgrdesc recovery conflict XID output. 2022-11-17 14:55:08 -08:00
parallel.h Mark ParallelMessagePending as sig_atomic_t 2022-09-27 09:29:56 +09:00
printsimple.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
printtup.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
relation.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
reloptions.h Harmonize parameter names in storage and AM code. 2022-09-19 19:18:36 -07:00
relscan.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
rewriteheap.h Harmonize heapam and tableam parameter names. 2022-09-19 16:46:23 -07:00
rmgr.h Pre-beta mechanical code beautification. 2022-05-12 15:17:30 -04:00
rmgrlist.h Update the comment in rmgrlist.h to match it to the code. 2022-08-30 09:16:41 +05:30
sdir.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
session.h Apply PGDLLIMPORT markings broadly. 2022-04-08 08:16:38 -04:00
skey.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
slru.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
spgist.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
spgist_private.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
spgxlog.h Standardize rmgrdesc recovery conflict XID output. 2022-11-17 14:55:08 -08:00
stratnum.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
subtrans.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
syncscan.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
sysattr.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
table.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
tableam.h Standardize rmgrdesc recovery conflict XID output. 2022-11-17 14:55:08 -08:00
timeline.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
toast_compression.h Apply PGDLLIMPORT markings broadly. 2022-04-08 08:16:38 -04:00
toast_helper.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
toast_internals.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
transam.h Revert 56-bit relfilenode change and follow-up commits. 2022-09-28 09:55:28 -04:00
tsmapi.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
tupconvert.h Generalize ri_RootToPartitionMap to use for non-partition children 2022-12-02 10:35:55 +01:00
tupdesc.h Harmonize parameter names in storage and AM code. 2022-09-19 19:18:36 -07:00
tupdesc_details.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
tupmacs.h Convert macros to static inline functions (tupmacs.h) 2022-07-18 08:01:27 +02:00
twophase.h Harmonize parameter names in storage and AM code. 2022-09-19 19:18:36 -07:00
twophase_rmgr.h Apply PGDLLIMPORT markings broadly. 2022-04-08 08:16:38 -04:00
valid.h Turn HeapKeyTest macro into inline function 2022-11-16 13:26:48 +01:00
visibilitymap.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
visibilitymapdefs.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
xact.h Rethink handling of [Prevent|Is]InTransactionBlock in pipeline mode. 2022-12-13 14:23:58 -05:00
xlog.h Reduce xlog.h inclusion footprint 2022-10-12 09:47:11 +02:00
xlog_internal.h Mark argument of RegisterCustomRmgr() as const. 2022-11-15 16:01:35 -08:00
xlogarchive.h Update copyright for 2022 2022-01-07 19:04:57 -05:00
xlogbackup.h Remove dependency to StringInfo in xlogbackup.{c.h} 2022-09-27 09:15:07 +09:00
xlogdefs.h Remove configure probe for fdatasync. 2022-08-05 16:37:38 +12:00
xloginsert.h Harmonize parameter names in storage and AM code. 2022-09-19 19:18:36 -07:00
xlogprefetcher.h Apply PGDLLIMPORT markings broadly. 2022-04-08 08:16:38 -04:00
xlogreader.h Restore pg_pread and friends. 2022-09-29 13:12:11 +13:00
xlogrecord.h Change internal RelFileNode references to RelFileNumber or RelFileLocator. 2022-07-06 11:39:09 -04:00
xlogrecovery.h Remove promote_trigger_file. 2022-11-29 12:08:38 +13:00
xlogstats.h Pre-beta mechanical code beautification. 2022-05-12 15:17:30 -04:00
xlogutils.h Harmonize parameter names in storage and AM code. 2022-09-19 19:18:36 -07:00