postgresql/doc/src/sgml
Tom Lane ca70bdaefe Fix issues around strictness of SIMILAR TO.
As a result of some long-ago quick hacks, the SIMILAR TO operator
and the corresponding flavor of substring() interpreted "ESCAPE NULL"
as selecting the default escape character '\'.  This is both
surprising and not per spec: the standard is clear that these
functions should return NULL for NULL input.

Additionally, because of inconsistency of the strictness markings
of 3-argument substring() and similar_escape(), the planner could not
inline the SQL definition of substring(), resulting in a substantial
performance penalty compared to the underlying POSIX substring()
function.

The simplest fix for this would be to change the strictness marking
of similar_escape(), but if we do that we risk breaking existing views
that depend on that function.  Hence, leave similar_escape() as-is
as a compatibility function, and instead invent a new function
similar_to_escape() that comes in two strict variants.

There are a couple of other behaviors in this area that are also
not per spec, but they are documented and seem generally at least
as sane as the spec's definition, so leave them alone.  But improve
the documentation to describe them fully.

Patch by me; thanks to Álvaro Herrera and Andrew Gierth for review
and discussion.

Discussion: https://postgr.es/m/14047.1557708214@sss.pgh.pa.us
2019-09-07 14:21:59 -04:00
..
images Replace genetic algorithm ASCII-art with a real figure 2019-08-19 12:05:38 -04:00
keywords Update SQL keywords list to SQL:2016 2019-05-14 15:44:37 +02:00
ref doc: Fix awkward markup 2019-09-06 22:19:53 +02: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 Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
amcheck.sgml Allow amcheck to re-find tuples using new search. 2019-03-20 10:41:36 -07:00
arch-dev.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
array.sgml docs: remove use of escape strings and use bytea hex output 2018-09-21 19:55:07 -04:00
auth-delay.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 doc: Postgres -> PostgreSQL 2019-09-06 22:16:58 +02: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 Add support of bool, bpchar, name and uuid to btree_gin 2018-04-05 18:19:10 +03:00
btree-gist.sgml Convert SGML IDs to lower case 2017-10-20 19:26:10 -04:00
btree.sgml doc: Spell checking 2019-07-05 08:34:54 +02:00
catalogs.sgml Doc: Improve wording of multiple places in documentation 2019-08-20 12:36:31 +09: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: Improve wording of multiple places in documentation 2019-08-20 12:36:31 +09:00
config.sgml Doc: Improve wording of multiple places in documentation 2019-08-20 12:36:31 +09:00
contrib-spi.sgml Remove timetravel extension. 2018-10-11 11:43:56 -07:00
contrib.sgml Document security implications of search_path and the public schema. 2018-02-26 07:39:44 -08:00
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 Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
dict-int.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
dict-xsyn.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
ecpg.sgml Doc: describe the "options" allowed in an ECPG connection target string. 2019-08-31 14:05:32 -04:00
errcodes.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 issues around strictness of SIMILAR TO. 2019-09-07 14:21:59 -04:00
fuzzystrmatch.sgml Don't use SGML empty tags 2017-10-17 15:10:33 -04:00
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 Don't use SGML empty tags 2017-10-17 15:10:33 -04:00
geqo.sgml Replace genetic algorithm ASCII-art with a real figure 2019-08-19 12:05:38 -04:00
gin.sgml doc: Spell checking 2019-07-05 08:34:54 +02:00
gist.sgml Fix inconsistencies and typos in the tree, take 11 2019-08-19 16:21:39 +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 Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Don't use SGML empty tags 2017-10-17 15:10:33 -04:00
information_schema.sgml Fix documentation of check_option in information_schema.views 2019-06-01 15:33:47 -04:00
install-windows.sgml Doc: Remove mention to "Visual Studio Express 2019" 2019-08-22 09:58:45 +09:00
installation.sgml doc: Postgres -> PostgreSQL 2019-09-06 22:16:58 +02:00
intagg.sgml Don't use SGML empty tags 2017-10-17 15:10:33 -04:00
intarray.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
intro.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Doc: Improve wording of multiple places in documentation 2019-08-20 12:36:31 +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 Doc: Improve wording of multiple places in documentation 2019-08-20 12:36:31 +09:00
Makefile doc: Fix image use in PDF build with vpath 2019-08-19 10:30:47 +02:00
manage-ag.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Don't use SGML empty tags 2017-10-17 15:10:33 -04:00
oid2name.sgml Rework option set of oid2name 2018-08-28 21:33:32 +09:00
pageinspect.sgml Improve documentation of pageinspect 2019-08-23 20:41:06 +09: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 Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Don't use SGML empty tags 2017-10-17 15:10:33 -04:00
planstats.sgml Doc: Improve wording of multiple places in documentation 2019-08-20 12:36:31 +09: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 Improve base backup protocol documentation 2019-09-03 11:59:36 +02:00
queries.sgml Allow user control of CTE materialization, and change the default behavior. 2019-02-16 16:11:12 -05:00
query.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
rangetypes.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
sepgsql.sgml Doc: explain where to find Makefile used to build sepgsql-regtest.pp. 2019-07-17 13:13:15 -04:00
sourcerepo.sgml Change default git repo URL to https 2018-02-07 11:00:26 +01:00
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 Doc: tweak installation doc edits made by commit 76c2af926. 2019-09-06 11:24:42 -04:00
standalone-profile.xsl Update to DocBook 4.5 2019-08-13 08:40:17 +02:00
start.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
storage.sgml Split tuptoaster.c into three separate files. 2019-09-05 13:15:10 -04:00
stylesheet-common.xsl doc: Add support for xref to command and function elements 2019-07-26 10:39:13 +02:00
stylesheet-fo.xsl doc: Improve PDF bookmarks 2017-08-15 14:37:44 -04:00
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 doc: Improve man build speed 2018-02-28 09:26:36 -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 Create INSTALL file via XSLT 2017-03-08 08:41:23 -05:00
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 Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Doc: Replace mention to "K bytes" by "kilobytes" in textsearch.sgml 2019-09-03 13:03:29 +09:00
trigger.sgml Generated columns 2019-03-30 08:15:57 +01:00
tsm-system-rows.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
tsm-system-time.sgml Convert documentation to DocBook XML 2017-11-23 09:44:28 -05:00
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 Doc: improve documentation of pg_signal_backend default role. 2019-08-27 18:03:09 -04: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.