On 20.02.19 17:28, Peter Eisentraut wrote:
On 2019-02-15 11:58, Jürgen Purtz wrote:
The graphic for dump/restore is transferred from 'pg_dump utility'
chapter to the 'backup and restore' chapter in sgml/backup.sgml. In this
chapter I made a lot of textual changes to explain the relation between
pg_dump, pg_restore and psql in more detail. Especially I tried to
introduce a more stringent use of terms, eg: avoiding 'archive' because
this term is used with a different meaning in the PITR chapter. (It
would be a good idea to do the same for the description of the pg_dump
utility.) Because I'm not a native English speaker, feel free to correct
my wording.
I think we should have some in-tree documentation about how to edit
images, probably at doc/src/sgml/svg/README. You had published some of
that documentation earlier in this thread, and whatever is relevant to
developers should be included in the tree. I'm specifically wondering
about the relationship between the *.svg and the inkscape/*.svg files.
Good idea. README is created. Also chapter "J.4. Documentation
Authoring" has some enhancements to differentiate between text and
graphic. It's also possible that we will see more sub-chapters in J.4 in
the future, e.g.: "Creating Mathematical Formulas".
Kind regards, Jürgen
diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile
index 8326c7c673..12997e903c 100644
--- a/doc/src/sgml/Makefile
+++ b/doc/src/sgml/Makefile
@@ -57,6 +57,8 @@ GENERATED_SGML = version.sgml \
ALLSGML := $(wildcard $(srcdir)/*.sgml $(srcdir)/ref/*.sgml) $(GENERATED_SGML)
+ALLSVG := $(wildcard $(srcdir)/svg/*.svg)
+
##
## Man pages
@@ -125,10 +127,12 @@ endif
html: html-stamp
-html-stamp: stylesheet.xsl postgres.sgml $(ALLSGML)
+html-stamp: stylesheet.xsl postgres.sgml $(ALLSGML) $(ALLSVG)
$(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^)
$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) $(wordlist 1,2,$^)
cp $(srcdir)/stylesheet.css html/
+ $(MKDIR_P) html/svg
+ cp $(ALLSVG) html/svg
touch $@
htmlhelp: stylesheet-hh.xsl postgres.sgml $(ALLSGML)
@@ -136,7 +140,7 @@ htmlhelp: stylesheet-hh.xsl postgres.sgml $(ALLSGML)
$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(wordlist 1,2,$^)
# single-page HTML
-postgres.html: stylesheet-html-nochunk.xsl postgres.sgml $(ALLSGML)
+postgres.html: stylesheet-html-nochunk.xsl postgres.sgml $(ALLSGML) $(ALLSVG)
$(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^)
$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) -o $@ $(wordlist 1,2,$^)
@@ -160,7 +164,7 @@ postgres.pdf:
$(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^)
$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) --stringparam paper.type USletter -o $@ $(wordlist 1,2,$^)
-%.pdf: %.fo
+%.pdf: %.fo $(ALLSVG)
$(FOP) -fo $< -pdf $@
@@ -169,7 +173,7 @@ postgres.pdf:
##
epub: postgres.epub
-postgres.epub: postgres.sgml $(ALLSGML)
+postgres.epub: postgres.sgml $(ALLSGML) $(ALLSVG)
$(XMLLINT) --noout --valid $<
$(DBTOEPUB) $<
diff --git a/doc/src/sgml/backup.sgml b/doc/src/sgml/backup.sgml
index a73fd4d044..f192ea3b52 100644
--- a/doc/src/sgml/backup.sgml
+++ b/doc/src/sgml/backup.sgml
@@ -16,7 +16,7 @@
There are three fundamentally different approaches to backing up
<productname>PostgreSQL</productname> data:
<itemizedlist>
- <listitem><para><acronym>SQL</acronym> dump</para></listitem>
+ <listitem><para>Dump into <acronym>SQL INSERT</acronym> syntax or a binary format</para></listitem>
<listitem><para>File system level backup</para></listitem>
<listitem><para>Continuous archiving</para></listitem>
</itemizedlist>
@@ -25,23 +25,28 @@
</para>
<sect1 id="backup-dump">
- <title><acronym>SQL</acronym> Dump</title>
+ <title>Dump</title>
<para>
- The idea behind this dump method is to generate a file with SQL
- commands that, when fed back to the server, will recreate the
- database in the same state as it was at the time of the dump.
+ The idea behind this dump technique is to generate a file
+ that, when fed back to the server, will recreate the
+ database in the same state as it was at the time of the dump generation.
+ </para>
+
+ <sect2>
+ <title>Creating the Dump</title>
+ <para>
<productname>PostgreSQL</productname> provides the utility program
<xref linkend="app-pgdump"/> for this purpose. The basic usage of this
command is:
<synopsis>
pg_dump <replaceable class="parameter">dbname</replaceable> > <replaceable class="parameter">dumpfile</replaceable>
</synopsis>
- As you see, <application>pg_dump</application> writes its result to the
+ As you see, <application>pg_dump</application> in this basic form writes its result to the
standard output. We will see below how this can be useful.
- While the above command creates a text file, <application>pg_dump</application>
- can create files in other formats that allow for parallelism and more
- fine-grained control of object restoration.
+ While the above command creates a plain-text SQL script, <application>pg_dump</application>
+ can create files also in other, dense binary formats that allow for parallelism and more
+ fine-grained control of object restoration, see: <xref linkend="backup-dump-binary"/>
</para>
<para>
@@ -100,12 +105,13 @@ pg_dump <replaceable class="parameter">dbname</replaceable> > <replaceable cl
(Exceptions are those operations that need to operate with an
exclusive lock, such as most forms of <command>ALTER TABLE</command>.)
</para>
+ </sect2>
<sect2 id="backup-dump-restore">
<title>Restoring the Dump</title>
<para>
- Text files created by <application>pg_dump</application> are intended to
+ Such plain-text SQL scripts created by <application>pg_dump</application> are intended to
be read in by the <application>psql</application> program. The
general command form to restore a dump is
<synopsis>
@@ -121,8 +127,6 @@ psql <replaceable class="parameter">dbname</replaceable> < <replaceable class
supports options similar to <application>pg_dump</application> for specifying
the database server to connect to and the user name to use. See
the <xref linkend="app-psql"/> reference page for more information.
- Non-text file dumps are restored using the <xref
- linkend="app-pgrestore"/> utility.
</para>
<para>
@@ -239,12 +243,12 @@ psql -f <replaceable class="parameter">dumpfile</replaceable> postgres
Some operating systems have maximum file size limits that cause
problems when creating large <application>pg_dump</application> output files.
Fortunately, <application>pg_dump</application> can write to the standard
- output, so you can use standard Unix tools to work around this
+ output, so you can use standard tools to work around this
potential problem. There are several possible methods:
</para>
<formalpara>
- <title>Use compressed dumps.</title>
+ <title>Compress dumps.</title>
<para>
You can use your favorite compression program, for example
<application>gzip</application>:
@@ -268,7 +272,7 @@ cat <replaceable class="parameter">filename</replaceable>.gz | gunzip | psql <re
</formalpara>
<formalpara>
- <title>Use <command>split</command>.</title>
+ <title>Split dumps.</title>
<para>
The <command>split</command> command
allows you to split the output into smaller files that are
@@ -287,22 +291,57 @@ cat <replaceable class="parameter">filename</replaceable>* | psql <replaceable c
</para>
</formalpara>
- <formalpara>
- <title>Use <application>pg_dump</application>'s custom dump format.</title>
+ <formalpara id="backup-dump-binary">
+ <title>Use binary formats.</title>
+ <para>
+ In addition to the above mentioned plain-text SQL script format <application>pg_dump</application>
+ can create its output files in denser, binary formats: <literal>custom</literal>,
+ <literal>directory</literal>, and <literal>tar</literal>.
+ Dumps in such binary formats are restored using the utility program
+ <xref linkend="app-pgrestore"/> instead of <application>psql</application>.
+ </para>
+ </formalpara>
+
+ <para>
+ <figure id="pg-dump-figure">
+ <title><command>pg_dump</command>, <command>psql</command>, and <command>pg_restore</command>:
+ Dump Formats and Restore Proceedings</title>
+ <indexterm><primary>pg_dump</primary>
+ <secondary>Dump Formats and Restore Proceedings (Figure)</secondary>
+ </indexterm>
+ <indexterm><primary>pg_restore</primary>
+ <secondary>Dump Formats and Restore Proceedings (Figure)</secondary>
+ </indexterm>
+ <indexterm><primary>backup</primary>
+ <secondary>Dump Formats and Restore Proceedings (Figure)</secondary>
+ </indexterm>
+ <mediaobject>
+ <imageobject role="html">
+ <imagedata fileref="svg/pgdump.svg" format="SVG" align="center" />
+ </imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="svg/pgdump.svg" format="SVG" scale="70" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ </para>
+
<para>
If <productname>PostgreSQL</productname> was built on a system with the
- <application>zlib</application> compression library installed, the custom dump
+ <application>zlib</application> compression library installed, the
+ <literal>custom</literal> dump
format will compress data as it writes it to the output file. This will
produce dump file sizes similar to using <command>gzip</command>, but it
has the added advantage that tables can be restored selectively. The
- following command dumps a database using the custom dump format:
+ following command dumps a database using the <literal>custom</literal> dump format:
<programlisting>
pg_dump -Fc <replaceable class="parameter">dbname</replaceable> > <replaceable class="parameter">filename</replaceable>
</programlisting>
- A custom-format dump is not a script for <application>psql</application>, but
- instead must be restored with <application>pg_restore</application>, for example:
+ As mentioned above dumps in <literal>custom</literal> format are binary
+ and not plain-text SQL scripts, they must be restored with <application>pg_restore</application>
+ instead of <application>psql</application>, for example:
<programlisting>
pg_restore -d <replaceable class="parameter">dbname</replaceable> <replaceable class="parameter">filename</replaceable>
@@ -311,11 +350,10 @@ pg_restore -d <replaceable class="parameter">dbname</replaceable> <replaceable c
See the <xref linkend="app-pgdump"/> and <xref
linkend="app-pgrestore"/> reference pages for details.
</para>
- </formalpara>
<para>
For very large databases, you might need to combine <command>split</command>
- with one of the other two approaches.
+ with one of the other approaches.
</para>
<formalpara>
@@ -325,15 +363,16 @@ pg_restore -d <replaceable class="parameter">dbname</replaceable> <replaceable c
<application>pg_dump</application>'s parallel mode. This will dump
multiple tables at the same time. You can control the degree of
parallelism with the <command>-j</command> parameter. Parallel dumps
- are only supported for the "directory" archive format.
+ are only supported for the <literal>directory</literal> format.
<programlisting>
pg_dump -j <replaceable class="parameter">num</replaceable> -F d -f <replaceable class="parameter">out.dir</replaceable> <replaceable class="parameter">dbname</replaceable>
</programlisting>
You can use <command>pg_restore -j</command> to restore a dump in parallel.
- This will work for any archive of either the "custom" or the "directory"
- archive mode, whether or not it has been created with <command>pg_dump -j</command>.
+ This will work for any dump output of either the <literal>custom</literal>
+ or the <literal>directory</literal>
+ format, whether or not it has been created with <command>pg_dump -j</command>.
</para>
</formalpara>
</sect2>
diff --git a/doc/src/sgml/docguide.sgml b/doc/src/sgml/docguide.sgml
index 0608b8c612..5ccc24833e 100644
--- a/doc/src/sgml/docguide.sgml
+++ b/doc/src/sgml/docguide.sgml
@@ -389,21 +389,21 @@ ADDITIONAL_FLAGS='-Xmx1500m'
<title>Documentation Authoring</title>
<para>
- The documentation sources are most conveniently modified with an editor
- that has a mode for editing XML, and even more so if it has some awareness
- of XML schema languages so that it can know about
- <productname>DocBook</productname> syntax specifically.
- </para>
-
- <para>
- Note that for historical reasons the documentation source files are named
+ Note that for historical reasons most of the documentation source files are named
with an extension <filename>.sgml</filename> even though they are now XML
files. So you might need to adjust your editor configuration to set the
correct mode.
</para>
<sect2>
- <title>Emacs</title>
+ <title>Textual Parts and Emacs</title>
+
+ <para>
+ The documentation's textual parts are most conveniently modified with an editor
+ that has a mode for editing XML, and even more so if it has some awareness
+ of XML schema languages so that it can know about
+ <productname>DocBook</productname> syntax specifically.
+ </para>
<para>
<productname>nXML Mode</productname>, which ships with
@@ -422,6 +422,43 @@ ADDITIONAL_FLAGS='-Xmx1500m'
</para>
</sect2>
+ <sect2>
+ <title>Graphic Elements</title>
+
+ <para>
+ Graphics - which are a <literal>figure</literal> in Docbook speach
+ - visualize complex situations or behaviour. They provide an
+ additional way for easy understanding what is described in the
+ text parts. Authors create them in <acronym>SVG</acronym> format
+ with any SVG tool of their choice.
+ </para>
+
+ <para>
+ Such tools show two disadvantages: They tend to use their own,
+ unportable enhancements and they produce extremely verbose,
+ unreadable source files. To overcome such drawbacks authors
+ shall create two files for every single graphic: one in
+ <literal>Optimized SVG</literal> format and another one in the
+ tool-specific <acronym>SVG</acronym> format. Both files
+ render to the same graphic. This enables 'diff-ability' (on the
+ <literal>Optimized SVG</literal> file) as well as the use of the
+ powerful tool-specific variant in any future. Both files are
+ stored in the repository, but only the <literal>Optimized SVG</literal>
+ variant is the liable one and included into the
+ <productname>PostgreSQL</productname> documentation.
+ </para>
+
+ <para>
+ This approach as well as the overall directory structure is
+ explained in more detail in <filename>doc/src/sgml/svg/README</filename>.
+ In addition, there are many more hints in
+ <productname>PostgreSQL</productname>'s wiki within the
+ <ulink url="https://wiki.postgresql.org/wiki/Category:SVG">
+ category SVG</ulink>.
+ </para>
+
+ </sect2>
+
</sect1>
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 86ff4e5c9e..ef299dd7f3 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -11228,17 +11228,18 @@ table2-mapping
<para>
As an example of using the output produced by these functions,
- <xref linkend="xslt-xml-html"/> shows an XSLT stylesheet that
- converts the output of
+ the following <xref linkend="xslt-xml-html"/> shows
+ an XSLT stylesheet that converts the output of
<function>table_to_xml_and_xmlschema</function> to an HTML
document containing a tabular rendition of the table data. In a
similar manner, the results from these functions can be
converted into other XML-based formats.
</para>
- <figure id="xslt-xml-html">
+ <formalpara id="xslt-xml-html" xreflabel="listing">
<title>XSLT Stylesheet for Converting SQL/XML Output to HTML</title>
-<programlisting><![CDATA[
+ <para>
+ <programlisting><![CDATA[
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
@@ -11284,7 +11285,8 @@ table2-mapping
</xsl:stylesheet>
]]></programlisting>
- </figure>
+ </para>
+ </formalpara>
</sect2>
</sect1>
diff --git a/doc/src/sgml/gin.sgml b/doc/src/sgml/gin.sgml
index cc7cd1ed2c..7e49254afe 100644
--- a/doc/src/sgml/gin.sgml
+++ b/doc/src/sgml/gin.sgml
@@ -453,6 +453,23 @@
key values for different columns can be of different types.
</para>
+ <figure id="gin-implementation-figure">
+ <title>GIN Overview</title>
+ <indexterm>
+ <primary>index</primary>
+ <secondary>GIN</secondary>
+ <tertiary>GIN (Figure)</tertiary>
+ </indexterm>
+ <mediaobject>
+ <imageobject role="html">
+ <imagedata fileref="svg/gin.svg" format="SVG" align="center" />
+ </imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="svg/gin.svg" format="SVG" scale="70" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+
<sect2 id="gin-fast-update">
<title>GIN Fast Update Technique</title>
diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml
index cbdad0c3fb..d630366a9a 100644
--- a/doc/src/sgml/storage.sgml
+++ b/doc/src/sgml/storage.sgml
@@ -776,6 +776,19 @@ data. Empty in ordinary tables.</entry>
</tgroup>
</table>
+ <figure id="page-layout-figure">
+ <title>Overall Page Layout</title>
+ <indexterm><primary>Page Layout (Figure)</primary></indexterm>
+ <mediaobject>
+ <imageobject role="html">
+ <imagedata fileref="svg/pagelayout.svg" format="SVG" align="center" />
+ </imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="svg/pagelayout.svg" format="SVG" scale="70" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+
<para>
The first 24 bytes of each page consists of a page header
diff --git a/doc/src/sgml/stylesheet-html-nochunk.xsl b/doc/src/sgml/stylesheet-html-nochunk.xsl
index ffd2012e91..9e756708f5 100644
--- a/doc/src/sgml/stylesheet-html-nochunk.xsl
+++ b/doc/src/sgml/stylesheet-html-nochunk.xsl
@@ -9,4 +9,27 @@
<xsl:include href="stylesheet-html-common.xsl" />
<xsl:include href="stylesheet-speedup-xhtml.xsl" />
+<!--
+ Integrate SVG and MathML files into the nochunk version (one single HTML file).
+ After migrating to Docbook 5.x this template becomes superfluous.
+-->
+<xsl:template match="imagedata">
+ <xsl:variable name="filename">
+ <xsl:call-template name="mediaobject.filename">
+ <xsl:with-param name="object" select=".."/>
+ </xsl:call-template>
+ </xsl:variable>
+
+ <xsl:choose>
+ <!-- Handle MathML and SVG markup in imagedata -->
+ <xsl:when xmlns:mml="http://www.w3.org/1998/Math/MathML" test="mml:*">
+ <xsl:apply-templates/>
+ </xsl:when>
+ <xsl:when xmlns:svg="http://www.w3.org/2000/svg" test="svg:*">
+ <xsl:apply-templates/>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:copy-of select="document($filename)"/>
+</xsl:template>
+
</xsl:stylesheet>
diff --git a/doc/src/sgml/svg/README b/doc/src/sgml/svg/README
new file mode 100644
index 0000000000..c4bd61151d
--- /dev/null
+++ b/doc/src/sgml/svg/README
@@ -0,0 +1,93 @@
+<!-- doc/src/sgml/svg/README -->
+
+Graphics in PG ('figure' in Docbook speach) use the SVG
+format. PG stores two different SVG files per graphic in
+the repository: a simple, more generic one to create the
+documentation and a tool-specific one for future modifications
+of the graphic. The reason for this approach and the directory
+layout are explained here.
+
+A more detailed description concerning the creation of graphics
+(compatibility rules, fonts, sizes, colors, general hints,
+tool-specific hints, ...) are listed in the wiki under the
+category 'SVG':
+
+ https://wiki.postgresql.org/wiki/Category:SVG
+
+
+Two files per graphic
+=====================
+
+An author can use any SVG tool of his choice to create SVG graphics.
+However, these tools create tool-specific SVG files which suffer
+from some major disadvantages:
+ - they are tool-specific
+ - they tend to use the tool's own, unportable enhancements and
+ - they produce extremely verbose, unreadable source files.
+To overcome such disadvantages authors shall store two different
+files per graphic after they have finished their work: one in the
+original tool-specific format and another one in a simple,
+less powerful but portable and short format, which is mostly
+called the 'Optimized SVG' format. This format typically misses
+enhanced features like 'connectors' or 'groups'.
+
+Both files render to the same graphic. Both are stored in the
+repository, but only the 'Optimized SVG' variant is the liable
+one and included into the generated PostgreSQL documentation.
+
+For future versions of the graphic the tool-specific file
+can be used as the basis of enhancements. The 'Optimized SVG'
+file serves for diffs.
+
+The 'Optimized SVG' file is mandatory, the tool-specific
+one is optional.
+
+
+Directory Structure
+===================
+
+The text files, which include the graphics, reside - as usual -
+in doc/src/sgml. The SVG files, which are included by the text
+files and used for the documentation generation, reside in
+doc/src/sgml/, their tool-specific counterpart in subdirectories,
+which reflect the name of the tool:
+
+doc/src/sgml/ # usual text files with extension .sgml
+doc/src/sgml/svg # SVG files in 'Optimized SVG' format
+doc/src/sgml/svg/inkscape # SVG files in Inkscape specific format
+doc/src/sgml/svg/<toolname> # SVG files in the format of another tool
+ ...
+ ...
+
+
+Limitation
+==========
+
+Man pages are created out of files in the sgml/ref/ subdirectory.
+If such a file contains a graphic, the generated man page looks
+a little ugly. Please avoid such situations and include graphics
+only into files of the sgml/ directory.
+
+
+Include graphics in text
+========================
+
+Graphics (<figure> element) can be included in <para> and in many other
+Docbook elements, e.g.:
+
+<para>
+ lorem ipsum ...
+ <figure id="page-layout-figure">
+ <title>Overall Page Layout</title>
+ <indexterm><primary>Page Layout (Figure)</primary></indexterm>
+ <mediaobject>
+ <imageobject role="html">
+ <imagedata fileref="svg/pagelayout.svg" format="SVG" align="center" />
+ </imageobject>
+ <imageobject role="fo">
+ <imagedata fileref="svg/pagelayout.svg" format="SVG" scale="70" />
+ </imageobject>
+ </mediaobject>
+ </figure>
+ lorem ipsum ...
+</para>
diff --git a/doc/src/sgml/svg/gin.svg b/doc/src/sgml/svg/gin.svg
new file mode 100644
index 0000000000..9ea11f8b1f
--- /dev/null
+++ b/doc/src/sgml/svg/gin.svg
@@ -0,0 +1,123 @@
+<svg width="580" height="320" viewBox="0 0 580 320" version="1.1" xmlns="http://www.w3.org/2000/svg">
+ <style type="text/css">
+ .text_small {font-style:normal;
+ font-weight:normal;
+ font-size:11px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_normal {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_big {font-style:normal;
+ font-weight:normal;
+ font-size:28px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_comment {font-style:italic;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_mono {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:monospace, monospace;
+ white-space:pre;
+ fill:black;
+ }
+ </style>
+ <defs>
+ <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5">
+ <path d="m0 0 10 5-10 5 3-5z"/>
+ </marker>
+ </defs>
+
+ <!-- border and background -->
+ <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%"
+ fill="whitesmoke" stroke="#CCCCCC" /> <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> -->
+
+ <!-- Meta page -->
+ <rect x="30" y="50" width="80" height="40" fill="white" stroke="black"/>
+ <text class="text_normal" x="32" y="65">Meta page</text>
+
+ <!-- Entry tree -->
+ <rect x="181" y="19" width="209" height="160" fill="white" stroke="black"/>
+ <text class="text_normal" x="186" y="35">Entry tree</text>
+ <path d="m110 70h83" style="marker-end:url(#a)" stroke="black"/>
+ <rect x="206" y="64" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+ <path d="m231 65 11-12" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m231 69 11 9" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m231 73 14 35" style="marker-end:url(#a)" stroke="black"/>
+ <rect x="251" y="39" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+ <rect x="251" y="79" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+ <rect x="251" y="119" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+ <path d="m266 49v18" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m266 89v18" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m276 44 32 -5" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m276 44 32 15" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m276 84 32 8" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m276 124 32 0" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m276 124 32 23" style="marker-end:url(#a)" stroke="black"/>
+ <rect x="320" y="30" width="25" height="10" style="fill:green" stroke="black"/>
+ <rect x="320" y="60" width="25" height="10" style="fill:limegreen" stroke="black"/>
+ <rect x="320" y="90" width="25" height="10" style="fill:green" stroke="black"/>
+ <rect x="320" y="120" width="25" height="10" style="fill:limegreen" stroke="black"/>
+ <rect x="320" y="150" width="25" height="10" style="fill:limegreen" stroke="black"/>
+ <path d="m331 40v6" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m331 70v6" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m331 100v6" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m331 130v6" style="marker-end:url(#a)" stroke="black"/>
+
+ <!-- Posting tree 1 -->
+ <rect x="430" y="10" width="115" height="70" fill="white" stroke="black"/>
+ <text class="text_normal" x="440" y="26">Posting tree</text>
+ <path d="m345 35 83 14" style="marker-end:url(#a)" stroke="black"/>
+ <rect x="440" y="45" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+ <path d="m465 50 30 -9" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m465 50 30 18" style="marker-end:url(#a)" stroke="black"/>
+ <rect x="505" y="35" width="25" height="10" style="fill:limegreen" stroke="black"/>
+ <rect x="505" y="65" width="25" height="10" style="fill:limegreen" stroke="black"/>
+ <path d="m515 47v8" style="marker-end:url(#a)" stroke="black"/>
+
+ <!-- Posting tree 2 -->
+ <rect x="430" y="100" width="115" height="70" fill="white" stroke="black"/>
+ <text class="text_normal" x="440" y="115">Posting tree</text>
+ <path d="m345 95 148 37" style="marker-end:url(#a)" stroke="black"/>
+ <rect x="505" y="130" width="25" height="10" style="fill:limegreen" stroke="black"/>
+
+ <!-- Posting tree 3 -->
+ <rect x="430" y="190" width="115" height="70" fill="white" stroke="black"/>
+ <text class="text_normal" x="440" y="205">Posting tree</text>
+ <path d="m345 95 85 125" style="marker-end:url(#a)" stroke="black"/>
+ <rect x="440" y="225" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+ <path d="m465 230 30 -9" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m465 230 30 18" style="marker-end:url(#a)" stroke="black"/>
+ <rect x="505" y="215" width="25" height="10" style="fill:limegreen" stroke="black"/>
+ <rect x="505" y="245" width="25" height="10" style="fill:limegreen" stroke="black"/>
+ <path d="m515 227v8" style="marker-end:url(#a)" stroke="black"/>
+
+ <!-- Pending list -->
+ <rect x="30" y="215" width="360" height="45" fill="white" stroke="black"/>
+ <text class="text_normal" x="37" y="232">Pending list</text>
+ <path d="m70 90 77 138" style="fill:none;marker-end:url(#a)" stroke="black"/>
+ <rect x="155" y="235" width="25" height="10" style="fill:orangered" stroke="black"/>
+ <rect x="210" y="235" width="25" height="10" style="fill:orangered" stroke="black"/>
+ <rect x="265" y="235" width="25" height="10" style="fill:orangered" stroke="black"/>
+ <rect x="320" y="235" width="25" height="10" style="fill:orangered" stroke="black"/>
+ <path d="m180 240h18" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m235 240h18" style="marker-end:url(#a)" stroke="black"/>
+ <path d="m290 240h18" style="marker-end:url(#a)" stroke="black"/>
+
+ <!-- Explanation -->
+ <rect x="30" y="291" width="25" height="10" fill="green" stroke="black"/>
+ <text class="text_small" x="60" y="300">Pointers to Posting tree</text>
+ <rect x="230" y="291" width="25" height="10" fill="limegreen" stroke="black"/>
+ <text class="text_small" x="260" y="300">Heap pointers (in Posting list or Posting tree)</text>
+
+</svg>
diff --git a/doc/src/sgml/svg/inkscape/gin_inkscape.svg b/doc/src/sgml/svg/inkscape/gin_inkscape.svg
new file mode 100644
index 0000000000..be9a9b4c73
--- /dev/null
+++ b/doc/src/sgml/svg/inkscape/gin_inkscape.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="580" height="320" viewBox="0 0 580 320" version="1.1" id="svg139" sodipodi:docname="gin_Inkscape.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+ <metadata id="metadata143">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview141" showgrid="false" inkscape:zoom="2.5793103" inkscape:cx="356.431" inkscape:cy="207.50734" inkscape:current-layer="svg139" />
+ <style type="text/css" id="style2">
+ .text_small {font-style:normal;
+ font-weight:normal;
+ font-size:11px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_normal {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_big {font-style:normal;
+ font-weight:normal;
+ font-size:28px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_comment {font-style:italic;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_mono {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:monospace, monospace;
+ white-space:pre;
+ fill:black;
+ }
+ </style>
+ <defs id="defs7">
+ <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5">
+ <path d="m0 0 10 5-10 5 3-5z" id="path4" />
+ </marker>
+ </defs>
+ <!-- border and background -->
+ <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%" fill="whitesmoke" stroke="#CCCCCC" id="rect9" />
+ <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> -->
+ <!-- Meta page -->
+ <rect x="30" y="50" width="80" height="40" fill="white" stroke="black" id="rect11" />
+ <text class="text_normal" x="32" y="65" id="text13">Meta page</text>
+ <!-- Entry tree -->
+ <rect x="181" y="19" width="209" height="160" fill="white" stroke="black" id="rect15" />
+ <text class="text_normal" x="186" y="35" id="text17">Entry tree</text>
+ <path d="m110 70h83" style="marker-end:url(#a)" stroke="black" id="path19" />
+ <rect x="206" y="64" width="25" height="10" style="fill:lightgrey" stroke="black" id="rect21" />
+ <path d="m231 65 11-12" style="marker-end:url(#a)" stroke="black" id="path23" />
+ <path d="m231 69 11 9" style="marker-end:url(#a)" stroke="black" id="path25" />
+ <path d="m231 73 14 35" style="marker-end:url(#a)" stroke="black" id="path27" />
+ <rect x="251" y="39" width="25" height="10" style="fill:lightgrey" stroke="black" id="rect29" />
+ <rect x="251" y="79" width="25" height="10" style="fill:lightgrey" stroke="black" id="rect31" />
+ <rect x="251" y="119" width="25" height="10" style="fill:lightgrey" stroke="black" id="rect33" />
+ <path d="m266 49v18" style="marker-end:url(#a)" stroke="black" id="path35" />
+ <path d="m266 89v18" style="marker-end:url(#a)" stroke="black" id="path37" />
+ <path d="m276 44 32 -5" style="marker-end:url(#a)" stroke="black" id="path39" />
+ <path d="m276 44 32 15" style="marker-end:url(#a)" stroke="black" id="path41" />
+ <path d="m276 84 32 8" style="marker-end:url(#a)" stroke="black" id="path43" />
+ <path d="m276 124 32 0" style="marker-end:url(#a)" stroke="black" id="path45" />
+ <path d="m276 124 32 23" style="marker-end:url(#a)" stroke="black" id="path47" />
+ <rect x="320" y="30" width="25" height="10" style="fill:green" id="rect49" stroke="black" />
+ <rect x="320" y="60" width="25" height="10" style="fill:limegreen" id="rect51" stroke="black" />
+ <rect x="320" y="90" width="25" height="10" style="fill:green" id="rect53" stroke="black" />
+ <rect x="320" y="120" width="25" height="10" style="fill:limegreen" id="rect55" stroke="black" />
+ <rect x="320" y="150" width="25" height="10" style="fill:limegreen" id="rect57" stroke="black" />
+ <path d="m331 40v6" style="marker-end:url(#a)" stroke="black" id="path59" />
+ <path d="m331 70v6" style="marker-end:url(#a)" stroke="black" id="path61" />
+ <path d="m331 100v6" style="marker-end:url(#a)" stroke="black" id="path63" />
+ <path d="m331 130v6" style="marker-end:url(#a)" stroke="black" id="path65" />
+ <!-- Posting tree 1 -->
+ <rect x="430" y="10" width="115" height="70" fill="white" stroke="black" id="rect67" />
+ <text class="text_normal" x="440" y="26" id="text69">Posting tree</text>
+ <path d="m345 35 83 14" style="marker-end:url(#a)" stroke="black" id="path71" />
+ <rect x="440" y="45" width="25" height="10" style="fill:lightgrey" stroke="black" id="rect73" />
+ <path d="m465 50 30 -9" style="marker-end:url(#a)" stroke="black" id="path75" />
+ <path d="m465 50 30 18" style="marker-end:url(#a)" stroke="black" id="path77" />
+ <rect x="505" y="35" width="25" height="10" style="fill:limegreen" stroke="black" id="rect79" />
+ <rect x="505" y="65" width="25" height="10" style="fill:limegreen" stroke="black" id="rect81" />
+ <path d="m515 47v8" style="marker-end:url(#a)" stroke="black" id="path83" />
+ <!-- Posting tree 2 -->
+ <rect x="430" y="100" width="115" height="70" fill="white" stroke="black" id="rect85" />
+ <text class="text_normal" x="440" y="115" id="text87">Posting tree</text>
+ <path d="m345 95 148 37" style="marker-end:url(#a)" stroke="black" id="path89" />
+ <rect x="505" y="130" width="25" height="10" style="fill:limegreen" stroke="black" id="rect91" />
+ <!-- Posting tree 3 -->
+ <rect x="430" y="190" width="115" height="70" fill="white" stroke="black" id="rect93" />
+ <text class="text_normal" x="440" y="205" id="text95">Posting tree</text>
+ <path d="m345 95 85 125" style="marker-end:url(#a)" stroke="black" id="path97" />
+ <rect x="440" y="225" width="25" height="10" style="fill:lightgrey" stroke="black" id="rect99" />
+ <path d="m465 230 30 -9" style="marker-end:url(#a)" stroke="black" id="path101" />
+ <path d="m465 230 30 18" style="marker-end:url(#a)" stroke="black" id="path103" />
+ <rect x="505" y="215" width="25" height="10" style="fill:limegreen" stroke="black" id="rect105" />
+ <rect x="505" y="245" width="25" height="10" style="fill:limegreen" stroke="black" id="rect107" />
+ <path d="m515 227v8" style="marker-end:url(#a)" stroke="black" id="path109" />
+ <!-- Pending list -->
+ <rect x="30" y="215" width="360" height="45" fill="white" stroke="black" id="rect111" />
+ <text class="text_normal" x="37" y="232" id="text113">Pending list</text>
+ <path d="m70 90 77 138" style="fill:none;marker-end:url(#a)" stroke="black" id="path115" />
+ <rect x="155" y="235" width="25" height="10" style="fill:orangered" stroke="black" id="rect117" />
+ <rect x="210" y="235" width="25" height="10" style="fill:orangered" stroke="black" id="rect119" />
+ <rect x="265" y="235" width="25" height="10" style="fill:orangered" stroke="black" id="rect121" />
+ <rect x="320" y="235" width="25" height="10" style="fill:orangered" stroke="black" id="rect123" />
+ <path d="m180 240h18" style="marker-end:url(#a)" stroke="black" id="path125" />
+ <path d="m235 240h18" style="marker-end:url(#a)" stroke="black" id="path127" />
+ <path d="m290 240h18" style="marker-end:url(#a)" stroke="black" id="path129" />
+ <!-- Explanation -->
+ <rect x="30" y="291" width="25" height="10" fill="green" stroke="black" id="rect131" />
+ <text class="text_small" x="60" y="300" id="text133">Pointers to Posting tree</text>
+ <rect x="230" y="291" width="25" height="10" fill="limegreen" stroke="black" id="rect135" />
+ <text class="text_small" x="260" y="300" id="text137">Heap pointers (in Posting list or Posting tree)</text>
+</svg>
diff --git a/doc/src/sgml/svg/inkscape/pagelayout_inkscape.svg b/doc/src/sgml/svg/inkscape/pagelayout_inkscape.svg
new file mode 100644
index 0000000000..5803077781
--- /dev/null
+++ b/doc/src/sgml/svg/inkscape/pagelayout_inkscape.svg
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="580" height="280" viewBox="0 0 580 280" version="1.1" id="svg53" sodipodi:docname="PageLayout_Inkscape.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+ <metadata id="metadata57">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview55" showgrid="false" inkscape:zoom="1.2896552" inkscape:cx="329.04306" inkscape:cy="137.84105" inkscape:current-layer="svg53" />
+ <style type="text/css" id="style2">
+ .text_small {font-style:normal;
+ font-weight:normal;
+ font-size:11px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_normal {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_big {font-style:normal;
+ font-weight:normal;
+ font-size:28px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_comment {font-style:italic;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_mono {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:monospace, monospace;
+ white-space:pre;
+ fill:black;
+ }
+ </style>
+ <defs id="defs7">
+ <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5">
+ <path d="m0 0 10 5-10 5 3-5z" id="path4" />
+ </marker>
+ </defs>
+ <!-- border and background -->
+ <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%" fill="whitesmoke" stroke="#CCCCCC" id="rect9" />
+ <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> -->
+ <!-- outer rectangle and texts -->
+ <rect x="20" y="80" width="500" height="150" fill="white" stroke="black" id="rect11" />
+ <text class="text_big" x="178" y="50" id="text13">Page Layout</text>
+ <text class="text_mono" x="540" y="125" transform="rotate(90 540 125)" id="text15">8 k B</text>
+ <text class="text_normal" x="392" y="144" id="text17">Free space</text>
+ <!-- first line -->
+ <rect x="20" y="80" width="90" height="30" fill="lime" stroke="black" id="rect19" />
+ <text class="text_normal" x="30" y="100" id="text21">Header</text>
+ <rect x="110" y="80" width="60" height="30" fill="cornflowerblue" stroke="black" id="rect23" />
+ <text class="text_normal" x="115" y="100" id="text25">ItemId</text>
+ <rect x="170" y="80" width="60" height="30" fill="cornflowerblue" stroke="black" id="rect27" />
+ <text class="text_normal" x="175" y="100" id="text29">ItemId</text>
+ <path d="m235 95h78" style="marker-end:url(#a);stroke-dasharray:5, 5" stroke="black" id="path31" />
+ <path d="m184 105-71 85" style="marker-end:url(#a)" fill="none" stroke="black" id="path33" />
+ <path d="m138 105 202 85" style="marker-end:url(#a)" fill="none" stroke="black" id="path35" />
+ <!-- last line -->
+ <path d="m100 215h-30" style="marker-end:url(#a);stroke-dasharray:5, 5" stroke="black" id="path37" />
+ <rect x="105" y="200" width="245" height="30" style="fill:#80BFFF" stroke="black" id="rect39" />
+ <!-- fill:hsl(210, 100%, 75%) -->
+ <text class="text_normal" x="121" y="220" id="text41">Item</text>
+ <rect x="345" y="200" width="85" height="30" style="fill:#80BFFF" stroke="black" id="rect43" />
+ <!-- fill:hsl(210, 100%, 75%) -->
+ <text class="text_normal" x="352" y="220" id="text45">Item</text>
+ <rect x="430" y="200" width="90" height="30" style="fill:springgreen" stroke="black" id="rect47" />
+ <text class="text_normal" x="440" y="220" id="text49">Special</text>
+ <!-- explanation -->
+ <text class="text_small" x="100" y="260" id="text51">Content grows from start to center and from end to center.</text>
+</svg>
diff --git a/doc/src/sgml/svg/inkscape/pgdump_inkscape.svg b/doc/src/sgml/svg/inkscape/pgdump_inkscape.svg
new file mode 100644
index 0000000000..967ca9966a
--- /dev/null
+++ b/doc/src/sgml/svg/inkscape/pgdump_inkscape.svg
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="580" height="370" viewBox="0 0 580 370" version="1.1" id="svg75" sodipodi:docname="pgDump_Inkscape.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+ <metadata id="metadata79">
+ <rdf:RDF>
+ <cc:Work rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview77" showgrid="false" inkscape:zoom="0.57538462" inkscape:cx="-79.946524" inkscape:cy="185" inkscape:current-layer="svg75" />
+ <style type="text/css" id="style2">
+ .text_small {font-style:normal;
+ font-weight:normal;
+ font-size:11px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_normal {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_big {font-style:normal;
+ font-weight:normal;
+ font-size:28px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_comment {font-style:italic;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_mono {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:monospace, monospace;
+ white-space:pre;
+ fill:black;
+ }
+ </style>
+ <defs id="defs23">
+ <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5">
+ <path d="m0 0 10 5 -10 5 3 -5z" id="path4" />
+ </marker>
+ <linearGradient id="gradient_disc" x1="0%" y1="0%" x2="100%" y2="0%">
+ <stop offset="10%" style="stop-color:white" id="stop7" />
+ <stop offset="90%" style="stop-color:steelblue" id="stop9" />
+ </linearGradient>
+ <symbol id="disc" fill="url(#gradient_disc)" stroke="black">
+ <ellipse cx="52" cy="100" rx="50" ry="12" id="ellipse12" />
+ <!-- bottom -->
+ <!-- hide upper half of bottom. use <rect> instead of <clipPath> to support gradient -->
+ <rect x="2" y="20" width="100" height="80" stroke-width="0" id="rect14" />
+ <ellipse cx="52" cy="20" rx="50" ry="12" id="ellipse16" />
+ <!-- top -->
+ <path d="m2 21 v80" id="path18" />
+ <!-- left -->
+ <path d="m102 21 v80" id="path20" />
+ <!-- right -->
+ </symbol>
+ </defs>
+ <!-- border and background -->
+ <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%" fill="whitesmoke" stroke="#CCCCCC" id="rect25" />
+ <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> -->
+ <!-- Original DB -->
+ <g transform="translate(220 10)" id="g33">
+ <use xlink:href="#disc" id="use27" />
+ <text x="25" y="60" class="text_normal" id="text29">Original</text>
+ <text x="18" y="75" class="text_normal" id="text31">Database</text>
+ </g>
+ <text x="20" y="60" class="text_normal" id="text35">pg_dump, plain-text format</text>
+ <path d="m210 70 h-138 v40" fill="none" stroke="black" marker-end="url(#a)" id="path37" />
+ <text x="340" y="60" class="text_normal" id="text39">pg_dump, other formats</text>
+ <path d="m340 70 h155 v40" fill="none" stroke="black" marker-end="url(#a)" id="path41" />
+ <!-- SQL script -->
+ <g transform="translate(20 120)" id="g49">
+ <use xlink:href="#disc" id="use43" />
+ <text x="10" y="60" class="text_normal" id="text45">SQL INSERT</text>
+ <text x="10" y="75" class="text_normal" id="text47">commands</text>
+ </g>
+ <text x="130" y="285" class="text_normal" id="text51">psql</text>
+ <path d="m72 240 v55 h130" fill="none" stroke="black" marker-end="url(#a)" id="path53" />
+ <!-- Binary dump -->
+ <g transform="translate(440 120)" id="g61">
+ <use xlink:href="#disc" id="use55" />
+ <text x="30" y="60" class="text_normal" id="text57">Binary</text>
+ <text x="35" y="75" class="text_normal" id="text59">File(s)</text>
+ </g>
+ <text x="370" y="285" class="text_normal" id="text63">pg_restore</text>
+ <path d="m495 240 v55 h-155" fill="none" stroke="black" marker-end="url(#a)" id="path65" />
+ <!-- New DB -->
+ <g transform="translate(220 230)" id="g73">
+ <use xlink:href="#disc" id="use67" />
+ <text x="20" y="60" class="text_normal" id="text69">Restored</text>
+ <text x="18" y="75" class="text_normal" id="text71">Database</text>
+ </g>
+</svg>
diff --git a/doc/src/sgml/svg/pagelayout.svg b/doc/src/sgml/svg/pagelayout.svg
new file mode 100644
index 0000000000..223fcaf749
--- /dev/null
+++ b/doc/src/sgml/svg/pagelayout.svg
@@ -0,0 +1,74 @@
+<svg width="580" height="280" viewBox="0 0 580 280" version="1.1" xmlns="http://www.w3.org/2000/svg">
+ <style type="text/css">
+ .text_small {font-style:normal;
+ font-weight:normal;
+ font-size:11px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_normal {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_big {font-style:normal;
+ font-weight:normal;
+ font-size:28px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_comment {font-style:italic;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_mono {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:monospace, monospace;
+ white-space:pre;
+ fill:black;
+ }
+ </style>
+ <defs>
+ <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5">
+ <path d="m0 0 10 5-10 5 3-5z"/>
+ </marker>
+ </defs>
+
+ <!-- border and background -->
+ <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%"
+ fill="whitesmoke" stroke="#CCCCCC" /> <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> -->
+
+ <!-- outer rectangle and texts -->
+ <rect x="20" y="80" width="500" height="150" fill="white" stroke="black"/>
+ <text class="text_big" x="178" y="50">Page Layout</text>
+ <text class="text_mono" x="540" y="125" transform="rotate(90 540 125)">8 k B</text>
+ <text class="text_normal" x="392" y="144">Free space</text>
+
+ <!-- first line -->
+ <rect x="20" y="80" width="90" height="30" fill="lime" stroke="black"/>
+ <text class="text_normal" x="30" y="100">Header</text>
+ <rect x="110" y="80" width="60" height="30" fill="cornflowerblue" stroke="black"/>
+ <text class="text_normal" x="115" y="100">ItemId</text>
+ <rect x="170" y="80" width="60" height="30" fill="cornflowerblue" stroke="black"/>
+ <text class="text_normal" x="175" y="100">ItemId</text>
+ <path d="m235 95h78" style="marker-end:url(#a);stroke-dasharray:5, 5" stroke="black"/>
+ <path d="m184 105-71 85" style="marker-end:url(#a)" fill="none" stroke="black"/>
+ <path d="m138 105 202 85" style="marker-end:url(#a)" fill="none" stroke="black"/>
+
+ <!-- last line -->
+ <path d="m100 215h-30" style="marker-end:url(#a);stroke-dasharray:5, 5" stroke="black"/>
+ <rect x="105" y="200" width="245" height="30" style="fill:#80BFFF" stroke="black"/> <!-- fill:hsl(210, 100%, 75%) -->
+ <text class="text_normal" x="121" y="220">Item</text>
+ <rect x="345" y="200" width="85" height="30" style="fill:#80BFFF" stroke="black"/> <!-- fill:hsl(210, 100%, 75%) -->
+ <text class="text_normal" x="352" y="220">Item</text>
+ <rect x="430" y="200" width="90" height="30" style="fill:springgreen" stroke="black"/>
+ <text class="text_normal" x="440" y="220">Special</text>
+
+ <!-- explanation -->
+ <text class="text_small" x="100" y="260">Content grows from start to center and from end to center.</text>
+
+</svg>
diff --git a/doc/src/sgml/svg/pgdump.svg b/doc/src/sgml/svg/pgdump.svg
new file mode 100644
index 0000000000..c327136de4
--- /dev/null
+++ b/doc/src/sgml/svg/pgdump.svg
@@ -0,0 +1,95 @@
+<svg width="580" height="370" viewBox="0 0 580 370" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+ <style type="text/css">
+ .text_small {font-style:normal;
+ font-weight:normal;
+ font-size:11px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_normal {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_big {font-style:normal;
+ font-weight:normal;
+ font-size:28px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_comment {font-style:italic;
+ font-weight:normal;
+ font-size:14px;
+ font-family:"Open Sans", sans-serif;
+ fill:black;
+ }
+ .text_mono {font-style:normal;
+ font-weight:normal;
+ font-size:14px;
+ font-family:monospace, monospace;
+ white-space:pre;
+ fill:black;
+ }
+ </style>
+ <defs>
+ <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5">
+ <path d="m0 0 10 5 -10 5 3 -5z"/>
+ </marker>
+
+ <linearGradient id="gradient_disc" x1="0%" y1="0%" x2="100%" y2="0%">
+ <stop offset="10%" style="stop-color:white" />
+ <stop offset="90%" style="stop-color:steelblue" />
+ </linearGradient>
+
+ <symbol id="disc" fill="url(#gradient_disc)" stroke="black">
+ <ellipse cx="52" cy="100" rx="50" ry="12" /> <!-- bottom -->
+ <!-- hide upper half of bottom. use <rect> instead of <clipPath> to support gradient -->
+ <rect x="2" y="20" width="100" height="80" stroke-width="0" />
+ <ellipse cx="52" cy="20" rx="50" ry="12"/> <!-- top -->
+ <path d="m2 21 v80"/> <!-- left -->
+ <path d="m102 21 v80"/> <!-- right -->
+ </symbol>
+ </defs>
+
+ <!-- border and background -->
+ <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%"
+ fill="whitesmoke" stroke="#CCCCCC" /> <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> -->
+
+ <!-- Original DB -->
+ <g transform="translate(220 10)">
+ <use xlink:href="#disc" />
+ <text x="25" y="60" class="text_normal">Original</text>
+ <text x="18" y="75" class="text_normal">Database</text>
+ </g>
+ <text x="20" y="60" class="text_normal">pg_dump, plain-text format</text>
+ <path d="m210 70 h-138 v40" fill="none" stroke="black" marker-end="url(#a)"/>
+ <text x="340" y="60" class="text_normal">pg_dump, other formats</text>
+ <path d="m340 70 h155 v40" fill="none" stroke="black" marker-end="url(#a)"/>
+
+ <!-- SQL script -->
+ <g transform="translate(20 120)">
+ <use xlink:href="#disc"/>
+ <text x="10" y="60" class="text_normal">SQL INSERT</text>
+ <text x="10" y="75" class="text_normal">commands</text>
+ </g>
+ <text x="130" y="285" class="text_normal">psql</text>
+ <path d="m72 240 v55 h130" fill="none" stroke="black" marker-end="url(#a)"/>
+
+ <!-- Binary dump -->
+ <g transform="translate(440 120)">
+ <use xlink:href="#disc"/>
+ <text x="30" y="60" class="text_normal">Binary</text>
+ <text x="35" y="75" class="text_normal">File(s)</text>
+ </g>
+ <text x="370" y="285" class="text_normal">pg_restore</text>
+ <path d="m495 240 v55 h-155" fill="none" stroke="black" marker-end="url(#a)"/>
+
+ <!-- New DB -->
+ <g transform="translate(220 230)">
+ <use xlink:href="#disc"/>
+ <text x="20" y="60" class="text_normal">Restored</text>
+ <text x="18" y="75" class="text_normal">Database</text>
+ </g>
+
+</svg>