postgresql/doc/src/sgml
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
..
images
keywords Revert SQL/JSON features 2022-09-01 17:07:14 -04:00
ref Convert domain_in to report errors softly. 2022-12-11 12:56:54 -05:00
.gitignore Update .gitignore 2022-09-14 21:56:01 +02:00
acronyms.sgml doc: add section about heap-only tuples (HOT) 2022-08-12 15:05:13 -04:00
adminpack.sgml Add glossary entries related to superusers 2022-11-18 11:59:26 +01:00
advanced.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
amcheck.sgml doc: Standardize capitalization of term "hot standby"/"Hot Standby" 2022-03-11 15:16:21 +09:00
appendix-obsolete-default-roles.sgml Fix file references inside some SGML comments 2022-06-20 14:33:41 +02:00
appendix-obsolete-pgreceivexlog.sgml Fix file references inside some SGML comments 2022-06-20 14:33:41 +02:00
appendix-obsolete-pgresetxlog.sgml Fix file references inside some SGML comments 2022-06-20 14:33:41 +02:00
appendix-obsolete-pgxlogdump.sgml Fix file references inside some SGML comments 2022-06-20 14:33:41 +02:00
appendix-obsolete-recovery-config.sgml Remove promote_trigger_file. 2022-11-29 12:08:38 +13:00
appendix-obsolete.sgml Fix file references inside some SGML comments 2022-06-20 14:33:41 +02:00
arch-dev.sgml doc: Properly punctuate "etc." 2022-05-19 09:42:17 +02:00
archive-modules.sgml doc: Improve some markups and some wording around archiving modules 2022-08-19 10:00:12 +09:00
array.sgml Doc: correct nitpicky mistakes in array_position/array_positions examples. 2020-06-25 13:28:30 -04:00
auth-delay.sgml doc: Do s/int/integer/ to describe the type of some GUC parameters 2022-06-17 09:03:07 +09:00
auto-explain.sgml autho_explain: Add GUC to log query parameters 2022-07-06 09:55:30 +09:00
backup-manifest.sgml Fix file references inside some SGML comments 2022-06-20 14:33:41 +02:00
backup.sgml Restore archive_command documentation 2022-09-22 07:35:00 -04:00
basebackup-to-shell.sgml doc: Improve some markups and some wording around archiving modules 2022-08-19 10:00:12 +09:00
basic-archive.sgml Allow archiving via loadable modules. 2022-02-03 14:05:02 -05:00
bgworker.sgml doc: Correct type of bgw_notify_pid 2022-10-14 08:38:49 +02:00
biblio.sgml doc: Remove link to JSON support in the SQL specification 2022-01-06 11:41:09 +09:00
bki.sgml doc: Properly punctuate "etc." 2022-05-19 09:42:17 +02:00
bloom.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
brin.sgml Fix assorted doc typos 2022-08-04 16:09:15 +07:00
btree-gin.sgml
btree-gist.sgml Add bool to btree_gist documentation 2021-12-11 04:59:15 +01:00
btree.sgml doc: add section about heap-only tuples (HOT) 2022-08-12 15:05:13 -04:00
catalogs.sgml Add USER SET parameter values for pg_db_role_setting 2022-12-09 13:12:20 +03:00
charset.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
citext.sgml
client-auth.sgml doc: Fix description of how the default user name is chosen 2022-11-24 09:04:50 +01:00
color.sgml Add color support for new frontend detail/hint messages 2022-04-11 17:36:44 +02:00
config.sgml Better document logical replication parameters 2022-12-12 20:18:56 +01:00
contrib-spi.sgml
contrib.sgml Add contrib/pg_walinspect. 2022-04-08 00:26:44 -07:00
cube.sgml doc: Avoid writing in first-person form 2022-12-02 13:49:54 +01:00
custom-rmgr.sgml Mark argument of RegisterCustomRmgr() as const. 2022-11-15 16:01:35 -08:00
custom-scan.sgml Allow CustomScan providers to say whether they support projections. 2021-07-06 18:10:20 -04:00
datatype.sgml doc: add transaction processing chapter with internals info 2022-11-29 20:49:52 -05:00
datetime.sgml doc: Properly punctuate "etc." 2022-05-19 09:42:17 +02:00
dblink.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
ddl.sgml Doc: word-smith the discussion of secure schema usage patterns. 2022-12-01 12:10:25 -05:00
dfunc.sgml Remove HP-UX port. 2022-07-08 14:05:05 +12:00
dict-int.sgml
dict-xsyn.sgml
diskusage.sgml
dml.sgml doc: Improve wording 2021-04-07 13:52:26 +02:00
docguide.sgml doc: Fix link to FreeBSD documentation project 2022-09-12 22:17:17 +02:00
earthdistance.sgml Doc: add a glossary entry for "domain". 2021-07-30 14:50:21 -04:00
ecpg.sgml doc: add documentation about ecpg Oracle-compatibility mode 2022-07-14 16:19:45 -04:00
errcodes.sgml Doc: remove now-redundant align specifications in colspecs. 2020-05-06 15:58:23 -04:00
event-trigger.sgml Allow event trigger table_rewrite for ALTER MATERIALIZED VIEW 2022-08-17 14:55:20 +09:00
extend.sgml In extensions, don't replace objects not belonging to the extension. 2022-08-08 11:12:31 -04:00
external-projects.sgml doc: update metacpan.org links to avoid redirects 2022-11-16 10:24:37 +01:00
fdwhandler.sgml Allow batch insertion during COPY into a foreign table. 2022-10-13 18:45:00 +09:00
features.sgml doc: Clean up title case use 2020-06-07 13:18:36 +02:00
file-fdw.sgml Add csvlog output for the new query_id value 2021-04-07 22:30:30 -04:00
filelist.sgml doc: add transaction processing chapter with internals info 2022-11-29 20:49:52 -05:00
func.sgml Add test scaffolding for soft error reporting from input functions. 2022-12-09 10:08:44 -05:00
fuzzystrmatch.sgml
generate-errcodes-table.pl Update copyright for 2022 2022-01-07 19:04:57 -05:00
generate-keywords-table.pl Update copyright for 2022 2022-01-07 19:04:57 -05:00
generic-wal.sgml Custom WAL Resource Managers. 2022-04-06 23:06:46 -07:00
geqo.sgml doc: Refresh more URLs in the docs 2020-07-18 22:43:35 +09:00
gin.sgml doc: Remove more notes about compatibilities with past versions 2020-12-01 16:32:26 +09:00
gist.sgml Doc: fix minor issues in GiST support function documentation. 2021-10-04 13:34:31 -04:00
glossary.sgml doc: add transaction processing chapter with internals info 2022-11-29 20:49:52 -05:00
hash.sgml Remove some trailing whitespace in documentation files 2022-01-27 18:31:01 +01:00
high-availability.sgml Remove promote_trigger_file. 2022-11-29 12:08:38 +13:00
history.sgml
hstore.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
indexam.sgml doc: add section about heap-only tuples (HOT) 2022-08-12 15:05:13 -04:00
indices.sgml doc: mention "bloom" as a possible index access method 2022-08-31 22:35:09 -04:00
info.sgml
information_schema.sgml Add UNIQUE null treatment option 2022-02-03 11:48:21 +01:00
install-binaries.sgml Expand installation documentation to cover binary installations 2020-10-06 14:15:32 +02:00
install-windows.sgml doc: document the TAP test environment variables 2022-11-16 10:25:21 +01:00
installation.sgml Add option to specify segment size in blocks 2022-12-07 19:32:59 -08:00
intagg.sgml
intarray.sgml Doc: improve example for intarray's uniq() function. 2022-06-03 13:54:53 -04:00
intro.sgml doc: Refresh more URLs in the docs 2020-07-18 22:43:35 +09:00
isn.sgml Misc documentation fixes. 2020-10-19 19:28:54 +03:00
jit.sgml Doc: tweak examples to silence line-too-long PDF build warnings. 2020-05-14 18:13:08 -04:00
json.sgml doc: Fix inconsistent quotes in some jsonb fields 2022-07-11 10:56:17 +09:00
keywords.sgml Allow most keywords to be used as column labels without requiring AS. 2020-09-18 16:46:36 -04:00
legal.sgml Update copyright for 2022 2022-01-07 19:04:57 -05:00
libpq.sgml Rethink handling of [Prevent|Is]InTransactionBlock in pipeline mode. 2022-12-13 14:23:58 -05:00
limits.sgml Doc: mention limitation of the number of resultset columns 2022-06-01 12:44:45 +12:00
lo.sgml Doc: add a glossary entry for "domain". 2021-07-30 14:50:21 -04:00
lobj.sgml Prevent write operations on large objects in read-only transactions 2022-07-04 15:48:52 +09:00
logical-replication.sgml Better document logical replication parameters 2022-12-12 20:18:56 +01:00
logicaldecoding.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
ltree.sgml plpython: Adjust docs after removal of Python 2 support. 2022-03-07 18:30:57 -08:00
maintenance.sgml doc: warn about security issues around log files 2022-08-12 12:02:21 -04:00
Makefile Run xmllint validation only once 2022-09-14 18:10:18 +02:00
manage-ag.sgml Remove configure probes for symlink/readlink, and dead code. 2022-08-05 09:22:56 +12:00
meson.build meson: docs: Add xml{lint,proc} wrapper to collect dependencies 2022-10-05 09:56:05 -07:00
mk_feature_tables.pl Initial pgindent and pgperltidy run for v13. 2020-05-14 13:06:50 -04:00
monitoring.sgml doc: Add installation instructions for building with meson 2022-12-01 15:32:38 +01:00
mvcc.sgml MERGE docs adjustments 2022-08-12 13:16:50 +02:00
nls.sgml doc: Avoid writing in first-person form 2022-12-02 13:49:54 +01:00
notation.sgml doc: clarify syntax notation, particularly parentheses 2022-02-02 21:53:52 -05:00
oid2name.sgml
oldsnapshot.sgml Add new 'old_snapshot' contrib module. 2020-09-24 13:55:47 -04:00
pageinspect.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
parallel.sgml Doc: fix outdated wording about parallel seq scans 2022-10-21 09:29:08 +13:00
passwordcheck.sgml doc: Update cracklib URL 2020-08-28 08:19:12 +02:00
perform.sgml doc: use wording "restore" instead of "reload" of dumps 2022-07-21 14:55:23 -04:00
pgbuffercache.sgml pg_buffercache: Add pg_buffercache_summary() 2022-10-13 09:55:46 -07:00
pgcrypto.sgml doc: Avoid writing in first-person form 2022-12-02 13:49:54 +01:00
pgfreespacemap.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
pgprewarm.sgml doc: add pg_prewarm example 2022-07-08 18:36:27 -04:00
pgrowlocks.sgml doc: add transaction processing chapter with internals info 2022-11-29 20:49:52 -05:00
pgstatstatements.sgml Fix pg_stat_statements for MERGE 2022-09-27 10:44:42 +02:00
pgstattuple.sgml
pgsurgery.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
pgtrgm.sgml doc: Document pg_trgm being case-insensitive by default 2022-08-17 09:56:02 +02:00
pgvisibility.sgml Use has_privs_for_roles for predefined role checks 2022-03-28 15:10:04 -04:00
pgwalinspect.sgml Use float8 datatype for percentiles in pg_walinspect stat functions 2022-09-12 10:01:00 +02:00
planstats.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
plhandler.sgml doc: use wording "restore" instead of "reload" of dumps 2022-07-21 14:55:23 -04:00
plperl.sgml doc: Properly punctuate "etc." 2022-05-19 09:42:17 +02:00
plpgsql.sgml doc: fix type alignment for CREATE TABLE in triggers 2022-12-02 11:31:54 +01:00
plpython.sgml plpython: Adjust docs after removal of Python 2 support. 2022-03-07 18:30:57 -08:00
pltcl.sgml doc: Properly punctuate "etc." 2022-05-19 09:42:17 +02:00
postgres-fdw.sgml Allow batch insertion during COPY into a foreign table. 2022-10-13 18:45:00 +09:00
postgres.sgml doc: add transaction processing chapter with internals info 2022-11-29 20:49:52 -05:00
problems.sgml
protocol.sgml Rethink handling of [Prevent|Is]InTransactionBlock in pipeline mode. 2022-12-13 14:23:58 -05:00
queries.sgml Doc: update queries.sgml for optional subquery aliases. 2022-11-27 12:26:04 -05:00
query.sgml Doc: improve tutorial section about grouped aggregates. 2022-11-08 18:25:03 -05:00
rangetypes.sgml Revert 29854ee8d1 due to buildfarm failures 2021-06-15 21:44:40 +03:00
README.links doc: mention <link> can be inside of <command>, but not <xref> 2021-04-22 16:01:17 -04:00
reference.sgml Add support for MERGE SQL command 2022-03-28 16:47:48 +02:00
regress.sgml doc: Add installation instructions for building with meson 2022-12-01 15:32:38 +01:00
release-16.sgml Stamp HEAD as 16devel. 2022-06-30 11:26:40 -04:00
release.sgml Stamp HEAD as 16devel. 2022-06-30 11:26:40 -04:00
replication-origins.sgml Refer to replication origin roident as "ID" in user facing messages and docs 2022-08-18 08:57:13 +07:00
rowtypes.sgml Doc: add a glossary entry for "domain". 2021-07-30 14:50:21 -04:00
rules.sgml Remove logic for converting a table to a view. 2022-12-02 12:14:32 -05:00
runtime.sgml doc: Add installation instructions for building with meson 2022-12-01 15:32:38 +01:00
seg.sgml Remove deprecated containment operators for contrib types. 2021-03-05 10:45:41 -05:00
sepgsql.sgml doc: Fix link to SELinux user guide in sepgsql page 2021-10-28 09:25:55 +09:00
sourcerepo.sgml
sources.sgml doc: Properly punctuate "etc." 2022-05-19 09:42:17 +02:00
spgist.sgml doc: Fix some typos and markups 2021-09-29 11:56:13 +09:00
spi.sgml Fix SPI's handling of errors during transaction commit. 2022-02-28 12:45:36 -05:00
sslinfo.sgml Introduce --with-ssl={openssl} as a configure option 2021-02-01 19:19:44 +09:00
standalone-install.xml doc: Add installation instructions for building with meson 2022-12-01 15:32:38 +01:00
standalone-profile.xsl Remove unused chunk from standalone-profile.xsl 2021-10-30 12:38:14 +02:00
start.sgml Doc: update example connection-failure messages in the documentation. 2021-01-23 15:50:51 -05:00
storage.sgml Revert 56-bit relfilenode change and follow-up commits. 2022-09-28 09:55:28 -04:00
stylesheet-common.xsl Doc: re-re-revise markup for tables of functions. 2020-04-30 00:34:12 -04:00
stylesheet-fo.xsl Doc: reformat catalog/view description tables. 2020-05-13 23:03:39 -04:00
stylesheet-hh.xsl Fix XML namespace declarations 2022-02-15 11:13:49 +01:00
stylesheet-html-common.xsl docs: Work around bug in the docbook xsl stylesheets. 2022-02-15 13:52:40 -08:00
stylesheet-html-nochunk.xsl Fix XML namespace declarations 2022-02-15 11:13:49 +01:00
stylesheet-man.xsl
stylesheet-speedup-common.xsl
stylesheet-speedup-xhtml.xsl
stylesheet-text.xsl Fix XML namespace declarations 2022-02-15 11:13:49 +01:00
stylesheet.css Doc: reformat catalog/view description tables. 2020-05-13 23:03:39 -04:00
stylesheet.xsl Fix XML namespace declarations 2022-02-15 11:13:49 +01:00
syntax.sgml doc: Consistently spell case-insensitive 2022-08-17 10:05:03 +02:00
system-views.sgml doc: add transaction processing chapter with internals info 2022-11-29 20:49:52 -05:00
tableam.sgml Fix doc oversight for custom WAL resource managers. 2022-08-25 10:26:31 -07:00
tablefunc.sgml Use the correct article for abbreviations 2021-06-11 13:38:04 +12:00
tablesample-method.sgml Use the correct article for abbreviations 2021-06-11 13:38:04 +12:00
tcn.sgml
test-decoding.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
textsearch.sgml Replace link to Hunspell with the current homepage 2022-11-21 23:25:48 +01:00
trigger.sgml Doc: Update struct Trigger definition. 2022-09-02 16:45:00 +09:00
tsm-system-rows.sgml Improve <xref> vs. <command> formatting in the documentation 2020-10-03 16:40:02 +02:00
tsm-system-time.sgml Improve <xref> vs. <command> formatting in the documentation 2020-10-03 16:40:02 +02:00
typeconv.sgml Use the correct article for abbreviations 2021-06-11 13:38:04 +12:00
unaccent.sgml
user-manag.sgml Provide non-superuser predefined roles for vacuum and analyze 2022-11-28 12:08:14 -05:00
uuid-ossp.sgml Reject bogus output from uuid_create(3). 2022-09-09 12:41:36 -04:00
vacuumlo.sgml doc: remove xreflabels from commits 75fcdd2ae2 and 85af628da5 2020-06-11 18:19:25 -04:00
version.sgml.in meson: Add initial version of meson based build system 2022-09-21 22:37:17 -07:00
wal.sgml doc: add transaction processing chapter with internals info 2022-11-29 20:49:52 -05:00
xact.sgml revert: add transaction processing chapter with internals info 2022-12-01 10:45:08 -05:00
xaggr.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
xfunc.sgml Convert *GetDatum() and DatumGet*() macros to inline functions 2022-09-27 20:50:21 +02:00
xindex.sgml Doc: fix minor issues in GiST support function documentation. 2021-10-04 13:34:31 -04:00
xml2.sgml doc: Properly punctuate "etc." 2022-05-19 09:42:17 +02:00
xmltools_dep_wrapper meson: docs: Add xml{lint,proc} wrapper to collect dependencies 2022-10-05 09:56:05 -07:00
xoper.sgml Remove support for postfix (right-unary) operators. 2020-09-17 19:38:05 -04:00
xplang.sgml Improve <xref> vs. <command> formatting in the documentation 2020-10-03 16:40:02 +02:00
xtypes.sgml

<!-- doc/src/sgml/README.links -->

Linking within DocBook documents can be confusing, so here is a summary:


Intra-document Linking
----------------------

<xref>
	use to get chapter/section number from the title of the target
	link, or xreflabel if defined at the target, or refentrytitle if target
        is a refentry;  has no close tag
	http://www.oasis-open.org/docbook/documentation/reference/html/xref.html

linkend=
	controls the target of the link/xref, required

endterm=
	for <xref>, allows the text of the link/xref to be taken from a
	different link target title

<link>
	use to supply text for the link, only uses linkend, requires </link>
	http://www.oasis-open.org/docbook/documentation/reference/html/link.html
	can be embedded inside of <command>, unlike <xref>


External Linking
----------------

<ulink>
	like <link>, but uses a URL (not a document target);  requires
	</ulink>; if no text is specified, the URL appears as the link
	text
	http://www.oasis-open.org/docbook/documentation/reference/html/ulink.html

url=
	used by <ulink> to specify the URL, required


Guidelines
----------

- For an internal link, if you want to supply text, use <link>, else
  <xref>.

- Specific nouns like GUC variables, SQL commands, and contrib modules
  usually have xreflabels.

- For an external link, use <ulink>, with or without link text.

- xreflabels added to tags prevent the chapter/section for id's from being
  referenced;  only the xreflabel is accessible.  Therefore, use xreflabels
  only when linking is common, and chapter/section information is unneeded.