postgresql/doc/src/sgml
Tom Lane bb5ae8f6c4 Use a hash table to de-duplicate NOTIFY events faster.
Previously, async.c got rid of duplicate notifications by scanning
the list of pending events to compare each one to the proposed new
event.  This works okay for very small numbers of distinct events,
but degrades as O(N^2) for many events.  We can improve matters by
using a hash table to probe for duplicates.  So as not to add a
lot of overhead for the simple cases that the code did handle well
before, create the hash table only once a (sub)transaction has
queued more than 16 distinct notify events.

A downside is that we now have to do per-event work to propagate
a successful subtransaction's notify events up to its parent.
(But this isn't significant unless the subtransaction had many
events, in which case the O(N^2) behavior would have been in
play already, so we still come out ahead.)

We can make some lemonade out of this lemon, though: since we must
examine each event anyway, it's now possible to de-duplicate events
fully, rather than skipping that for events merged up from
subtransactions.  Hence, remove the old weasel wording in notify.sgml
about whether de-duplication happens or not, and adjust the test
case in async-notify.spec that exhibited the old behavior.

While at it, rearrange the definition of struct Notification to make
it more compact and require just one palloc per event, rather than
two or three.  This saves space when there are a lot of events,
in fact more than enough to buy back the space needed for the hash
table.

Patch by me, based on discussions around a different patch
submitted by Filip Rembiałkowski.

Discussion: https://postgr.es/m/17822.1564186806@sss.pgh.pa.us
2019-08-15 12:22:12 -04:00
..
images Add XSL stylesheet to fix up SVG files 2019-06-19 21:26:42 +02:00
keywords Update SQL keywords list to SQL:2016 2019-05-14 15:44:37 +02:00
ref Use a hash table to de-duplicate NOTIFY events faster. 2019-08-15 12:22:12 -04:00
.gitignore doc: Generate keywords table automatically 2019-05-07 15:29:39 +02:00
acronyms.sgml doc: Update redirecting links 2018-07-16 10:48:05 +02:00
adminpack.sgml Support new default roles with adminpack 2018-04-06 14:47:10 -04:00
advanced.sgml
amcheck.sgml Allow amcheck to re-find tuples using new search. 2019-03-20 10:41:36 -07:00
arch-dev.sgml
array.sgml docs: remove use of escape strings and use bytea hex output 2018-09-21 19:55:07 -04:00
auth-delay.sgml
auto-explain.sgml Fix more typos and inconsistencies in documentation 2019-04-28 22:53:33 +09:00
backup.sgml Fix and improve several places in the docs 2019-07-13 14:43:29 +09:00
bgworker.sgml Add missing documentation for BGWORKER_BYPASS_ALLOWCONN 2018-04-22 14:03:36 +02:00
biblio.sgml Fix and improve several places in the docs 2019-07-13 14:43:29 +09:00
bki.sgml Sync commentary in transam.h and bki.sgml. 2019-03-14 00:23:40 -04:00
bloom.sgml Fix some grammar errors in bloom.sgml 2018-10-22 00:28:56 +03:00
brin.sgml Remove deprecated abstime, reltime, tinterval datatypes. 2018-10-11 11:59:15 -07:00
btree-gin.sgml
btree-gist.sgml
btree.sgml doc: Spell checking 2019-07-05 08:34:54 +02:00
catalogs.sgml docs: remove pg_roles mention of the oid column being displayed 2019-07-10 14:24:36 -04:00
charset.sgml Remove dead encoding-conversion functions. 2019-07-05 14:17:27 -04:00
citext.sgml Collations with nondeterministic comparison 2019-03-22 12:12:43 +01:00
client-auth.sgml doc: mention pg_reload_conf() for reloading the config file 2019-07-15 20:57:24 -04:00
config.sgml Doc: improve documentation about postgresql.auto.conf. 2019-08-15 11:14:26 -04:00
contrib-spi.sgml Remove timetravel extension. 2018-10-11 11:43:56 -07:00
contrib.sgml
cube.sgml Fix a number of typos 2018-06-20 16:01:18 +02:00
custom-scan.sgml Fix inconsistencies and typos in the tree 2019-07-29 12:28:30 +09:00
datatype.sgml Add gen_random_uuid function 2019-07-14 14:30:27 +02:00
datetime.sgml Document handling of invalid/ambiguous timestamp input near DST boundaries. 2018-11-29 18:28:10 -05:00
dblink.sgml Fix documentation for dblink_error_message() return value 2019-02-17 13:17:34 -05:00
ddl.sgml Doc: clarify when table rewrites happen with column addition and DEFAULT 2019-07-19 11:42:33 +09:00
dfunc.sgml
dict-int.sgml
dict-xsyn.sgml
diskusage.sgml Fix many typos and inconsistencies 2019-07-01 10:00:23 +09:00
dml.sgml Fix typo 2018-06-20 16:06:03 +02:00
docguide.sgml Update to DocBook 4.5 2019-08-13 08:40:17 +02:00
earthdistance.sgml
ecpg.sgml Fix inconsistencies and typos in the tree, take 10 2019-08-13 13:53:41 +09:00
errcodes.sgml
event-trigger.sgml Doc: Fix event trigger firing table 2019-07-28 22:02:15 +09:00
extend.sgml Add PG_CFLAGS, PG_CXXFLAGS, and PG_LDFLAGS variables to PGXS 2019-02-03 17:48:09 +09:00
external-projects.sgml Correct the URL pointing to PL/R 2019-04-27 09:30:22 -04:00
fdwhandler.sgml Doc: Update FDW documentation about GetForeignUpperPaths(). 2019-05-09 19:50:15 +09:00
features.sgml Update SQL features/conformance information to SQL:2016 2019-05-14 15:44:37 +02:00
file-fdw.sgml Fix some typos 2019-06-09 11:25:56 +09:00
filelist.sgml Stamp HEAD as 13devel. 2019-07-01 12:50:55 -04:00
func.sgml Fix some typos in jsonpath documentation 2019-08-07 16:06:45 +03:00
fuzzystrmatch.sgml
generate-errcodes-table.pl Update copyright for 2019 2019-01-02 12:44:25 -05:00
generate-keywords-table.pl Update SQL keywords list to SQL:2016 2019-05-14 15:44:37 +02:00
generic-wal.sgml
geqo.sgml
gin.sgml doc: Spell checking 2019-07-05 08:34:54 +02:00
gist.sgml Fix inconsistencies and typos in the tree 2019-07-16 13:23:53 +09:00
high-availability.sgml doc: Fix whitespace 2019-04-08 22:32:46 +02:00
history.sgml doc: Update redirecting links 2018-07-16 10:48:05 +02:00
hstore.sgml
indexam.sgml tableam: basic documentation. 2019-04-03 17:40:29 -07:00
indices.sgml Doc: clarify partial-index example. 2019-04-03 18:28:26 -04:00
info.sgml
information_schema.sgml Fix documentation of check_option in information_schema.views 2019-06-01 15:33:47 -04:00
install-windows.sgml Add support for Visual Studio 2019 in build scripts 2019-07-02 14:02:33 +09:00
installation.sgml Improve installation instructions with pg_ctl in documentation 2019-02-02 13:23:26 +09:00
intagg.sgml
intarray.sgml
intro.sgml
isn.sgml doc: Update redirecting links 2018-07-16 10:48:05 +02:00
jit.sgml Fix issues around EXPLAIN with JIT. 2018-10-03 12:48:37 -07:00
json.sgml Assorted fixes for jsonpath documentation 2019-07-10 07:48:55 +03:00
keywords.sgml doc: Generate keywords table automatically 2019-05-07 15:29:39 +02:00
legal.sgml Update copyright for 2019 2019-01-02 12:44:25 -05:00
libpq.sgml Fix inconsistencies and typos in the tree, take 9 2019-08-05 12:14:58 +09:00
limits.sgml doc: Add appendix detailing some limits of PostgreSQL 2018-11-29 14:01:11 +01:00
lo.sgml Change PROCEDURE to FUNCTION in CREATE TRIGGER syntax 2018-08-22 14:44:49 +02:00
lobj.sgml doc: Make libpq documentation navigable between functions 2019-07-26 10:39:14 +02:00
logical-replication.sgml doc: Clarify logical replication documentation 2019-07-08 14:28:42 +02:00
logicaldecoding.sgml doc: Use = after long options in documentation 2018-05-21 14:54:24 -04:00
ltree.sgml Fix crash in contrib/ltree's lca() function for empty input array. 2018-07-13 18:45:30 -04:00
maintenance.sgml Mention REINDEX CONCURRENTLY in documentation about index maintenance 2019-04-27 09:06:39 +09:00
Makefile doc: Generate keywords table automatically 2019-05-07 15:29:39 +02:00
manage-ag.sgml
mk_feature_tables.pl Reindent Perl files with perltidy version 20170521. 2018-04-25 14:00:19 -04:00
monitoring.sgml Add command column to pg_stat_progress_create_index 2019-06-04 09:29:02 +02:00
mvcc.sgml REINDEX CONCURRENTLY 2019-03-29 08:26:33 +01:00
nls.sgml doc: Update redirecting links 2018-07-16 10:48:05 +02:00
notation.sgml
oid2name.sgml Rework option set of oid2name 2018-08-28 21:33:32 +09:00
pageinspect.sgml Remove extra comma 2019-03-13 13:41:14 +01:00
parallel.sgml doc: Fix whitespace 2019-04-08 22:32:46 +02:00
passwordcheck.sgml doc: Update redirecting links 2018-07-16 10:48:05 +02:00
perform.sgml Rework the pg_statistic_ext catalog 2019-06-16 01:20:31 +02:00
pgbuffercache.sgml
pgcrypto.sgml Add gen_random_uuid function 2019-07-14 14:30:27 +02:00
pgfreespacemap.sgml Revert "Avoid the creation of the free space map for small heap relations". 2019-05-07 09:30:24 +05:30
pgprewarm.sgml
pgrowlocks.sgml Fix documentation of pgrowlocks using "lock_type" instead of "modes" 2018-10-02 16:34:41 +09:00
pgstandby.sgml Integrate recovery.conf into postgresql.conf 2018-11-25 16:33:40 +01:00
pgstatstatements.sgml Extend pg_stat_statements_reset to reset statistics specific to a 2019-01-11 08:50:09 +05:30
pgstattuple.sgml Revert "Avoid the creation of the free space map for small heap relations". 2019-05-07 09:30:24 +05:30
pgtrgm.sgml Add docs of missing GUC to pgtrgm.sgml 2019-06-10 19:42:36 +03:00
pgvisibility.sgml
planstats.sgml Rework the pg_statistic_ext catalog 2019-06-16 01:20:31 +02:00
plhandler.sgml Change function call information to be variable length. 2019-01-26 14:17:52 -08:00
plperl.sgml Change PROCEDURE to FUNCTION in CREATE TRIGGER syntax 2018-08-22 14:44:49 +02:00
plpgsql.sgml Fix inconsistencies and typos in the tree, take 10 2019-08-13 13:53:41 +09:00
plpython.sgml docs: clarify plpython SD and GD dictionary behavior 2018-08-25 11:52:30 -04:00
pltcl.sgml Remove WITH OIDS support, change oid catalog column visibility. 2018-11-20 16:00:17 -08:00
postgres-fdw.sgml postgres_fdw: Fix incorrect handling of row movement for remote partitions. 2019-04-24 18:31:50 +09:00
postgres.sgml Update to DocBook 4.5 2019-08-13 08:40:17 +02:00
problems.sgml Fix inconsistencies and typos in the tree 2019-07-22 10:01:50 +09:00
protocol.sgml Fix typos in documentatoin of GSSAPI encryption 2019-05-17 08:22:28 +09:00
queries.sgml Allow user control of CTE materialization, and change the default behavior. 2019-02-16 16:11:12 -05:00
query.sgml
rangetypes.sgml
README.links doc: Refine README.links further 2019-03-29 13:36:24 +01:00
reference.sgml Rename pg_verify_checksums to pg_checksums 2019-03-13 10:43:20 +09:00
regress.sgml Run UTF8-requiring collation tests by default 2019-07-31 09:46:51 +02:00
release-13.sgml Stamp HEAD as 13devel. 2019-07-01 12:50:55 -04:00
release.sgml Stamp HEAD as 13devel. 2019-07-01 12:50:55 -04:00
replication-origins.sgml
rowtypes.sgml docs: remove use of escape strings and use bytea hex output 2018-09-21 19:55:07 -04:00
rules.sgml Doc: remove ancient comment. 2019-02-17 20:23:10 +09:00
runtime.sgml Revert "initdb: Change authentication defaults" 2019-07-22 19:28:25 +02:00
seg.sgml
sepgsql.sgml Doc: explain where to find Makefile used to build sepgsql-regtest.pp. 2019-07-17 13:13:15 -04:00
sourcerepo.sgml
sources.sgml Fix inconsistencies and typos in the tree, take 10 2019-08-13 13:53:41 +09:00
spgist.sgml Add support for <-> (box, point) operator to SP-GiST box_ops 2019-07-14 15:09:23 +03:00
spi.sgml Further adjust SPITupleTable to provide a public row-count field. 2019-07-18 10:37:13 -04:00
sslinfo.sgml Fix inconsistencies and typos in the tree, take 9 2019-08-05 12:14:58 +09:00
standalone-install.xml Update to DocBook 4.5 2019-08-13 08:40:17 +02:00
standalone-profile.xsl Update to DocBook 4.5 2019-08-13 08:40:17 +02:00
start.sgml
storage.sgml Fix typos. 2019-05-26 18:28:18 +05:30
stylesheet-common.xsl doc: Add support for xref to command and function elements 2019-07-26 10:39:13 +02:00
stylesheet-fo.xsl
stylesheet-hh.xsl doc: Add some images 2019-03-27 23:10:23 +01:00
stylesheet-html-common.xsl Better scaling of images in HTML output 2019-04-16 14:27:56 +02:00
stylesheet-html-nochunk.xsl doc: Add some images 2019-03-27 23:10:23 +01:00
stylesheet-man.xsl
stylesheet-speedup-common.xsl
stylesheet-speedup-xhtml.xsl
stylesheet-text.xsl
stylesheet.css Better scaling of images in HTML output 2019-04-16 14:27:56 +02:00
stylesheet.xsl doc: Add some images 2019-03-27 23:10:23 +01:00
syntax.sgml Document security implications of qualified names. 2018-07-28 20:08:01 -07:00
tableam.sgml docs: correct typo-ed path to heapam_handler.c. 2019-04-17 17:31:54 -07:00
tablefunc.sgml
tablesample-method.sgml Fix some documentation about access methods 2019-05-29 11:37:37 -04:00
tcn.sgml Change PROCEDURE to FUNCTION in CREATE TRIGGER syntax 2018-08-22 14:44:49 +02:00
test-decoding.sgml doc: Fix reference to "decoder" to instead be the correct "output plugin". 2018-07-24 10:42:59 -07:00
textsearch.sgml Sync our Snowball stemmer dictionaries with current upstream 2019-07-04 13:26:48 +02:00
trigger.sgml Generated columns 2019-03-30 08:15:57 +01:00
tsm-system-rows.sgml
tsm-system-time.sgml
typeconv.sgml Document security implications of qualified names. 2018-07-28 20:08:01 -07:00
unaccent.sgml Make contrib/unaccent's unaccent() function work when not in search path. 2018-09-06 10:49:45 -04:00
user-manag.sgml Documentation spell checking and markup improvements 2018-06-29 21:26:41 +02:00
uuid-ossp.sgml Add gen_random_uuid function 2019-07-14 14:30:27 +02:00
vacuumlo.sgml Rework option set of vacuumlo 2018-08-28 21:42:45 +09:00
wal.sgml doc: Update redirecting links 2018-07-16 10:48:05 +02:00
xaggr.sgml Improve spelling of new FINALFUNC_MODIFY aggregate attribute. 2018-05-21 11:41:42 -04:00
xfunc.sgml doc: Spell checking 2019-07-05 08:34:54 +02:00
xindex.sgml Add support for nearest-neighbor (KNN) searches to SP-GiST 2018-09-19 01:54:10 +03:00
xml2.sgml Replace references to mailinglists with @lists.postgresql.org 2019-01-17 13:42:40 +01:00
xoper.sgml Create the infrastructure for planner support functions. 2019-02-09 18:08:48 -05:00
xplang.sgml Fix inconsistencies and typos in the tree 2019-07-29 12:28:30 +09:00
xtypes.sgml Deduplicate "invalid input syntax" messages for various types. 2018-07-22 14:58:01 -07:00

<!-- 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

<link>
	use to supply text for the link, requires </link>
	http://www.oasis-open.org/docbook/documentation/reference/html/link.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


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.