postgresql/doc/src/sgml
Etsuro Fujita de28140ded postgres_fdw: Inherit the local transaction's access/deferrable modes.
READ ONLY transactions should prevent modifications to foreign data as
well as local data, but postgres_fdw transactions declared as READ ONLY
that reference foreign tables mapped to a remote view executing volatile
functions would modify data on remote servers, as it would open remote
transactions in READ WRITE mode.

Similarly, DEFERRABLE transactions should not abort due to a
serialization failure even when accessing foreign data, but postgres_fdw
transactions declared as DEFERRABLE would abort due to that failure in a
remote server, as it would open remote transactions in NOT DEFERRABLE
mode.

To fix, modify postgres_fdw to open remote transactions in the same
access/deferrable modes as the local transaction.  This commit also
modifies it to open remote subtransactions in the same access mode as
the local subtransaction.

This commit changes the behavior of READ ONLY/DEFERRABLE transactions
using postgres_fdw; in particular, it doesn't allow the READ ONLY
transactions to modify data on remote servers anymore, so such
transactions should be redeclared as READ WRITE or rewritten using other
tools like dblink.  The release notes should note this as an
incompatibility.

These issues exist since the introduction of postgres_fdw, but to avoid
the incompatibility in the back branches, fix them in master only.

Author: Etsuro Fujita <etsuro.fujita@gmail.com>
Reviewed-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/CAPmGK16n_hcUUWuOdmeUS%2Bw4Q6dZvTEDHb%3DOP%3D5JBzo-M3QmpQ%40mail.gmail.com
Discussion: https://postgr.es/m/E1uLe9X-000zsY-2g%40gemulon.postgresql.org
2026-04-05 18:55:00 +09:00
..
func Online enabling and disabling of data checksums 2026-04-03 22:58:51 +02:00
images Online enabling and disabling of data checksums 2026-04-03 22:58:51 +02:00
keywords SQL Property Graph Queries (SQL/PGQ) 2026-03-16 10:14:18 +01:00
ref Online enabling and disabling of data checksums 2026-04-03 22:58:51 +02:00
.gitignore Stop generating plain-text INSTALL instructions. 2023-12-22 13:32:15 -05:00
acronyms.sgml docs: Add acronym and glossary entries for I/O and AIO 2025-04-01 13:30:33 -04:00
advanced.sgml Doc: commit performs rollback of aborted transactions. 2026-03-26 15:14:27 -04:00
amcheck.sgml amcheck: Fix snapshot usage in bt_index_parent_check 2025-12-04 18:12:08 +01: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 Revert "Rename contrib module basic_archive to basic_wal_module" 2023-01-26 09:13:39 +09:00
arch-dev.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
archive-modules.sgml Add built-in ERROR handling for archive callbacks. 2024-04-02 22:28:11 -05:00
array.sgml Improve readability and error detection of array_in(). 2023-11-13 13:01:51 -05:00
auth-delay.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
auto-explain.sgml EXPLAIN: Always use two fractional digits for row counts. 2025-02-27 11:27:16 -05:00
backup-manifest.sgml doc: Standardize use of dashes in references to CRC and SHA. 2024-08-09 13:16:33 -05:00
backup.sgml doc: double-quote use of %f, %p, and %r in literal commands. 2025-11-14 09:08:53 -05:00
basebackup-to-shell.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
basic-archive.sgml Revert "Rename contrib module basic_archive to basic_wal_module" 2023-01-26 09:13:39 +09:00
bgworker.sgml Use standard die() handler for SIGTERM in bgworkers 2026-02-18 19:59:34 +02:00
biblio.sgml doc: Add links to olsen93 and ong90 in bibliography 2025-02-21 11:28:42 +01:00
bki.sgml Simplify creation of built-in functions with default arguments. 2026-02-18 14:14:44 -05:00
bloom.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
brin.sgml docs: Merge separate chapters on built-in index AMs into one. 2024-04-05 10:34:04 -04:00
btree-gin.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
btree-gist.sgml Mark GiST inet_ops as opcdefault, and deal with ensuing fallout. 2026-01-08 14:03:56 -05:00
btree.sgml Add nbtree skip scan optimization. 2025-04-04 12:27:04 -04:00
catalogs.sgml Doc: Fix oversight in commit 55cefadde8. 2026-04-02 10:16:53 +05:30
charset.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
citext.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
client-auth.sgml Update pg_hba.conf example to reflect MD5 deprecation 2025-12-19 15:48:18 +07:00
color.sgml Add color support for new frontend detail/hint messages 2022-04-11 17:36:44 +02:00
config.sgml Online enabling and disabling of data checksums 2026-04-03 22:58:51 +02:00
contrib-spi.sgml Move contrib/spi testing from core regression tests to contrib/spi. 2025-04-08 19:12:03 -04:00
contrib.sgml Add pg_plan_advice contrib module. 2026-03-12 13:00:43 -04:00
cube.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
custom-rmgr.sgml docs: Consolidate into new "WAL for Extensions" chapter. 2024-04-15 15:57:13 -04:00
custom-scan.sgml Doc: Improve documentation for creating custom scan paths. 2023-08-30 17:45:00 +09:00
datatype.sgml Allow explicit casting between bytea and uuid. 2026-03-19 13:51:50 -07:00
datetime.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
dblink.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
ddl.sgml Doc: update ddl.sgml's description of cmin and cmax. 2026-03-30 18:25:19 -04:00
dfunc.sgml Remove traces of support for Sun Studio compiler 2025-09-12 07:39:05 +02:00
dict-int.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
dict-xsyn.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
dml.sgml Add UPDATE/DELETE FOR PORTION OF 2026-04-01 19:06:03 +02:00
docguide.sgml doc: Remove dead link to NewbieDoc Docbook Guide 2025-06-24 11:49:37 +02:00
earthdistance.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
ecpg.sgml Force standard_conforming_strings to always be ON. 2026-01-21 15:08:38 -05:00
errcodes.sgml Doc: remove now-redundant align specifications in colspecs. 2020-05-06 15:58:23 -04:00
event-trigger.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
extend.sgml Make "directory" setting work with extension_control_path 2025-05-02 16:35:48 +02:00
external-projects.sgml doc: Replace list of drivers and PLs with wiki link 2023-08-23 14:13:07 +02:00
fdwhandler.sgml Remove bits* typedefs. 2026-03-30 16:12:08 -05:00
features.sgml SQL Property Graph Queries (SQL/PGQ) 2026-03-16 10:14:18 +01:00
file-fdw.sgml file_fdw: Support multi-line HEADER option. 2026-01-22 10:14:12 +09:00
filelist.sgml Add pg_plan_advice contrib module. 2026-03-12 13:00:43 -04:00
fuzzystrmatch.sgml Add support for Daitch-Mokotoff Soundex in contrib/fuzzystrmatch. 2023-04-07 17:32:26 -04:00
generate-errcodes-table.pl Update copyright for 2026 2026-01-01 13:24:10 -05:00
generate-keywords-table.pl Update copyright for 2026 2026-01-01 13:24:10 -05:00
generate-targets-meson.pl Update copyright for 2026 2026-01-01 13:24:10 -05:00
generic-wal.sgml docs: Consolidate into new "WAL for Extensions" chapter. 2024-04-15 15:57:13 -04:00
geqo.sgml Doc: add XML ID attributes to <sectN> and <varlistentry> tags. 2023-01-09 15:08:24 -05:00
gin.sgml Add cross-type comparisons to contrib/btree_gin. 2025-07-03 16:24:31 -04:00
gist.sgml Doc: improve explanation of GiST compress/decompress methods. 2026-03-31 11:23:26 -04:00
glossary.sgml Online enabling and disabling of data checksums 2026-04-03 22:58:51 +02:00
hash.sgml Doc: fix typo in hash index documentation 2025-12-09 14:41:30 +13:00
high-availability.sgml Further doc updates to reflect MD5 deprecation 2026-01-07 12:00:05 +07:00
history.sgml Doc: add missing punctuation 2026-01-04 21:12:23 +13:00
hstore.sgml Force standard_conforming_strings to always be ON. 2026-01-21 15:08:38 -05:00
indexam.sgml Change IndexAmRoutines to be statically-allocated structs. 2025-12-30 18:26:23 -05:00
indextypes.sgml docs: Merge separate chapters on built-in index AMs into one. 2024-04-05 10:34:04 -04:00
indices.sgml doc: consistently use "structname" and "structfield" markup 2025-11-08 09:49:43 -05:00
info.sgml Don't use SGML empty tags 2017-10-17 15:10:33 -04:00
information_schema.sgml SQL Property Graph Queries (SQL/PGQ) 2026-03-16 10:14:18 +01:00
install-binaries.sgml Expand installation documentation to cover binary installations 2020-10-06 14:15:32 +02:00
installation.sgml Revert "Change default value of default_toast_compression to "lz4"" 2026-03-05 08:25:35 +09:00
intagg.sgml doc, intagg: fix one-to-many mention to many-to-many 2023-12-07 19:36:52 -05:00
intarray.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
intro.sgml doc: add links to Postgres features intro 2023-10-28 14:02:46 -04:00
isn.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
jit.sgml EXPLAIN: Always use two fractional digits for row counts. 2025-02-27 11:27:16 -05:00
json.sgml doc: Mention PASSING support for jsonpath variables 2026-02-13 12:12:11 +01: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 2026 2026-01-01 13:24:10 -05:00
libpq.sgml libpq: Add oauth_ca_file option to change CAs without debugging 2026-03-30 14:14:45 -07:00
limits.sgml Document limit on the number of out-of-line values per table 2024-08-20 13:36:33 +07:00
lo.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
lobj.sgml Update copyright for 2026 2026-01-01 13:24:10 -05:00
logical-replication.sgml Change syntax of EXCEPT TABLE clause in publication commands. 2026-03-31 09:40:51 +05:30
logicaldecoding.sgml Standardize replication origin naming to use "ReplOrigin". 2026-01-28 11:03:29 -08:00
ltree.sgml docs: fix text by adding/removing parentheses 2025-11-07 22:19:09 -05:00
maintenance.sgml Add rudimentary table prioritization to autovacuum. 2026-03-27 10:17:05 -05:00
Makefile Revert "Improve docs syntax checking" 2025-10-06 07:53:31 -04:00
manage-ag.sgml doc: improve tablespace example query and link to helper funcs. 2024-11-01 15:54:16 -04:00
meson.build meson: Add target for generating docs images 2026-02-13 11:50:14 +01:00
mk_feature_tables.pl Make all Perl warnings fatal 2023-12-29 18:20:00 +01:00
monitoring.sgml Online enabling and disabling of data checksums 2026-04-03 22:58:51 +02:00
mvcc.sgml Add support for INSERT ... ON CONFLICT DO SELECT. 2026-02-12 09:57:04 +00:00
nls.sgml doc: Fix some typos and grammar 2023-10-25 09:40:55 +09:00
notation.sgml doc: clarify syntax notation, particularly parentheses 2022-02-02 21:53:52 -05:00
oauth-validators.sgml oauth: Let validators provide failure DETAILs 2026-04-03 16:05:33 -07:00
oid2name.sgml oid2name: Add relation path to the information provided by -x/--extended 2026-02-05 09:02:12 +09:00
pageinspect.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
parallel.sgml Add parallelism support for TID Range Scans 2025-11-27 14:05:04 +13:00
passwordcheck.sgml Add passwordcheck.min_password_length. 2025-01-07 15:06:40 -06:00
perform.sgml Doc: document how EXPLAIN ANALYZE reports parallel queries. 2026-03-23 14:48:58 -04:00
pgbuffercache.sgml doc: Fix titles of some pg_buffercache functions. 2025-12-09 11:01:38 -06:00
pgcrypto.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
pgfreespacemap.sgml doc: Correct description of values used in FSM for indexes 2025-03-27 10:20:41 +09:00
pglogicalinspect.sgml Standardize LSN formatting by zero padding 2025-07-07 13:57:43 +02:00
pgoverexplain.sgml doc: Use proper tags in pg_overexplain documentation. 2025-12-25 00:27:19 +09:00
pgplanadvice.sgml pg_plan_advice: Invent DO_NOT_SCAN(relation_identifier). 2026-03-26 17:09:57 -04:00
pgprewarm.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
pgrowlocks.sgml pgrowlocks: change lock mode output labels for consistency 2023-09-26 17:41:48 -04:00
pgstatstatements.sgml pg_stat_statements: Add counters for generic and custom plans 2025-07-31 11:37:37 +09:00
pgstattuple.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
pgsurgery.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
pgtrgm.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
pgvisibility.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
pgwalinspect.sgml Standardize LSN formatting by zero padding 2025-07-07 13:57:43 +02:00
planstats.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
plhandler.sgml doc: use wording "restore" instead of "reload" of dumps 2022-07-21 14:55:23 -04:00
plperl.sgml doc: consistently use "structname" and "structfield" markup 2025-11-08 09:49:43 -05:00
plpgsql.sgml Doc: include MERGE in variable substitution command list 2025-11-17 10:51:26 +13:00
plpython.sgml doc: revert "xreflabel" used for PL/Python & libpq chapters 2026-01-19 22:59:10 -05:00
pltcl.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
postgres-fdw.sgml postgres_fdw: Inherit the local transaction's access/deferrable modes. 2026-04-05 18:55:00 +09:00
postgres.sgml doc: Assorted documentation improvements 2025-11-20 15:04:41 +01:00
problems.sgml doc: use more accurate URL for bug reporting 2024-11-04 15:08:01 -05:00
protocol.sgml libpq: Grease the protocol by default 2026-02-23 10:48:20 -08:00
queries.sgml SQL Property Graph Queries (SQL/PGQ) 2026-03-16 10:14:18 +01:00
query.sgml doc: Add example file for COPY 2025-07-17 00:21:18 +02: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
README.non-ASCII doc: update guidelines on non-ASCII characters in docs 2025-05-03 14:45:26 -04:00
reference.sgml SQL Property Graph Queries (SQL/PGQ) 2026-03-16 10:14:18 +01:00
regress.sgml Online enabling and disabling of data checksums 2026-04-03 22:58:51 +02:00
release-19.sgml Stamp HEAD as 19devel. 2025-06-29 22:28:10 -04:00
release.sgml Stamp HEAD as 19devel. 2025-06-29 22:28:10 -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: remove obsolete, confused <note> about rowtype I/O syntax. 2025-12-31 13:19:27 -05:00
rules.sgml doc: consistently use "structname" and "structfield" markup 2025-11-08 09:49:43 -05:00
runtime.sgml Doc: minor improvements to SNI documentation. 2026-03-23 15:33:51 -04:00
seg.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
sepgsql.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
sourcerepo.sgml doc: Add index entry for Git. 2026-01-07 13:57:36 +09:00
sources.sgml Provide more-specific error details/hints for function lookup failures. 2025-09-16 12:17:02 -04:00
spgist.sgml docs: Merge separate chapters on built-in index AMs into one. 2024-04-05 10:34:04 -04:00
spi.sgml Mark function arguments of type "Datum *" as "const Datum *" where possible 2025-10-31 10:47:25 +01:00
sslinfo.sgml Revert "Add notBefore and notAfter to SSL cert info display" 2024-03-22 22:58:41 +01:00
start.sgml doc: clarify create database in start docs uses command line 2024-08-19 19:22:10 -04:00
storage.sgml Improve type handling of varlena structures 2026-02-11 07:33:24 +09:00
stylesheet-common.xsl Fix documentation build with older docbook-xsl 2024-02-08 11:38:46 +01:00
stylesheet-fo.xsl Improve PDF documentation margins 2025-08-13 15:50:14 +02:00
stylesheet-html-common.xsl Fix documentation build with older docbook-xsl 2024-02-08 11:38:46 +01:00
stylesheet-html-nochunk.xsl docs: html: load stylesheet via custom.css.source 2023-04-04 21:29:45 -07:00
stylesheet-man.xsl Now that we have non-Latin1 SGML detection, restore Latin1 chars 2024-12-03 17:09:49 -05:00
stylesheet-speedup-common.xsl doc: Further speed improvements for HTML XSLT build 2016-12-22 15:41:44 -05:00
stylesheet-speedup-xhtml.xsl doc: Further speed improvements for HTML XSLT build 2016-12-22 15:41:44 -05:00
stylesheet-text.xsl Fix XML namespace declarations 2022-02-15 11:13:49 +01:00
stylesheet.css doc: Make HTML ids discoverable 2023-04-13 10:16:33 +02:00
stylesheet.css.xml docs: html: load stylesheet via custom.css.source 2023-04-04 21:29:45 -07:00
stylesheet.xsl docs: html: load stylesheet via custom.css.source 2023-04-04 21:29:45 -07:00
syntax.sgml Force standard_conforming_strings to always be ON. 2026-01-21 15:08:38 -05:00
system-views.sgml Add more columns to pg_stats, pg_stats_ext, and pg_stats_ext_exprs. 2026-03-17 09:26:27 -05:00
tableam.sgml doc: Add minimal C and SQL example to add a custom table AM handler 2024-10-07 15:47:40 +09:00
tablefunc.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
tablesample-method.sgml Use the correct article for abbreviations 2021-06-11 13:38:04 +12:00
targets-meson.txt meson: Add headerscheck and cpluspluscheck targets 2026-03-18 11:27:43 +01:00
tcn.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
test-decoding.sgml Standardize LSN formatting by zero padding 2025-07-07 13:57:43 +02:00
textsearch.sgml Doc: remove bogus claim that tsvectors can have up to 2^64 entries. 2026-03-31 11:49:54 -04:00
trigger.sgml Add UPDATE/DELETE FOR PORTION OF 2026-04-01 19:06:03 +02:00
tsm-system-rows.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
tsm-system-time.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
typeconv.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
unaccent.sgml Doc: use uppercase keywords in SQLs 2025-11-06 16:03:02 +13:00
user-manag.sgml Allow pg_{read,write}_all_data to access large objects. 2026-02-23 14:55:21 -06:00
uuid-ossp.sgml Doc: Update ulinks to RFC documents to avoid redirect 2024-04-10 13:53:25 +02: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-for-extensions.sgml docs: Consolidate into new "WAL for Extensions" chapter. 2024-04-15 15:57:13 -04:00
wal.sgml Online enabling and disabling of data checksums 2026-04-03 22:58:51 +02:00
xact.sgml Replace BackendIds with 0-based ProcNumbers 2024-03-03 19:38:22 +02:00
xaggr.sgml Remove trailing whitespace from *.sgml files. 2022-04-20 11:04:49 -04:00
xfunc.sgml doc: Slightly correct advice on C/C++ linkage 2026-01-14 15:05:29 +01:00
xindex.sgml Rename gist stratnum support function 2025-06-02 08:41:27 +02:00
xml2.sgml Describe each contrib module in its SGML section title 2023-01-20 20:01:59 +01:00
xmltools_dep_wrapper meson: docs: Add xml{lint,proc} wrapper to collect dependencies 2022-10-05 09:56:05 -07:00
xoper.sgml doc: Some copy-editing around prefix operators 2025-06-30 10:38:43 +02:00
xplang.sgml Improve <xref> vs. <command> formatting in the documentation 2020-10-03 16:40:02 +02:00
xtypes.sgml Use palloc_object() and palloc_array() in more areas of the tree 2025-12-09 14:53:17 +09:00

<!-- doc/src/sgml/README.non-ASCII -->

Representation of non-ASCII characters
--------------------------------------

Find non-ASCII characters using:

        grep --recursive --color='auto' -P '[\x80-\xFF]' .

Convert to HTML4 named entity (&) escapes
-----------------------------------------

We support several output formats:

*  html (supports all Unicode characters)
*  man (supports all Unicode characters)
*  pdf (supports only Latin-1 characters)
*  info

While some output formatting tools support all Unicode characters,
others only support Latin-1 characters.  Specifically, the PDF rendering
engine can only display Latin-1 characters;  non-Latin-1 Unicode
characters are displayed as "###".

Therefore, in the SGML files, we can only use Latin-1 characters.  We
can use UTF8 representations of Latin-1 characters, or HTML entities of
Latin-1 characters, e.g., &Aacute;lvaro.

Do not use UTF numeric character escapes (&#nnn;).

When building the PDF docs, problem characters will appear as warnings.

HTML entities
        official:      http://www.w3.org/TR/html4/sgml/entities.html
        one page:      http://www.zipcon.net/~swhite/docs/computers/browsers/entities_page.html
        other lists:   http://www.zipcon.net/~swhite/docs/computers/browsers/entities.html
                       http://www.zipcon.net/~swhite/docs/computers/browsers/entities_page.html
                       https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references