On 25.01.19 10:39, Peter Eisentraut wrote:

On 24/01/2019 00:53, Bruce Momjian wrote:
This is a pretty complicated issue with a lot of back-story.  I am
thinking Tatsuo or me will probably commit it before March.
Isn't that all the more reason to add it to the commitfest?

I added it to commitfest 2019-03.

In the attachment you find a new patch which extends the first one in regards of three topics:

 * Index terms for each graphic
 * List of figures in the TOC for HTML and PDF output
 * More or less a side-effect: List of tables and examples for HTML.
   This already exists for PDF.
 * (In a future version there may also be a 'List of Program-Listings'.
   But this requires some more actions.)

Kind regards, Jürgen Purtz


diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile
index 8326c7c673..27d1e674f4 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)
 
+SVGSRC := $(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) $(SVGSRC)
 	$(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 $(SVGSRC) 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) $(SVGSRC)
 	$(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^)
 	$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) -o $@ $(wordlist 1,2,$^)
 
@@ -152,15 +156,15 @@ postgres.txt: postgres.html
 postgres.pdf:
 	$(error Invalid target;  use postgres-A4.pdf or postgres-US.pdf as targets)
 
-%-A4.fo: stylesheet-fo.xsl %.sgml $(ALLSGML)
+%-A4.fo: stylesheet-fo.xsl %.sgml
 	$(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^)
 	$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) --stringparam paper.type A4 -o $@ $(wordlist 1,2,$^)
 
-%-US.fo: stylesheet-fo.xsl %.sgml $(ALLSGML)
+%-US.fo: stylesheet-fo.xsl %.sgml
 	$(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^)
 	$(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) --stringparam paper.type USletter -o $@ $(wordlist 1,2,$^)
 
-%.pdf: %.fo
+%.pdf: %.fo $(ALLSGML) $(SVGSRC)
 	$(FOP) -fo $< -pdf $@
 
 
@@ -169,7 +173,7 @@ postgres.pdf:
 ##
 
 epub: postgres.epub
-postgres.epub: postgres.sgml $(ALLSGML)
+postgres.epub: postgres.sgml $(ALLSGML) $(SVGSRC)
 	$(XMLLINT) --noout --valid $<
 	$(DBTOEPUB) $<
 
@@ -209,7 +213,7 @@ check: postgres.sgml $(ALLSGML) check-tabs
 install: install-html install-man
 
 installdirs:
-	$(MKDIR_P) '$(DESTDIR)$(htmldir)'/html $(addprefix '$(DESTDIR)$(mandir)'/man, 1 3 $(sqlmansectnum))
+	$(MKDIR_P) '$(DESTDIR)$(htmldir)'/html/svg html/svg $(addprefix '$(DESTDIR)$(mandir)'/man, 1 3 $(sqlmansectnum))
 
 # If the install used a man directory shared with other applications, this will remove all files.
 uninstall:
diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index 4930ec17f6..fe83c46d2c 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..75dbbf36df 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_svg">
+  <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/postgres.sgml b/doc/src/sgml/postgres.sgml
index 96d196d229..06d270aed6 100644
--- a/doc/src/sgml/postgres.sgml
+++ b/doc/src/sgml/postgres.sgml
@@ -280,6 +280,22 @@
 
  </part>
 
+ <part>
+  <title>Lists of Figures, Tables and Examples</title>
+  <appendix id="list-of-figures">
+   <title>List of Figures</title>
+   <para />
+  </appendix>
+  <appendix id="list-of-tables">
+   <title>List of Tables</title>
+   <para />
+  </appendix>
+  <appendix id="list-of-examples">
+   <title>List of Examples</title>
+   <para />
+  </appendix>
+ </part>
+
  &biblio;
  <index id="bookindex"></index>
 
diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml
index 9e0bb93f08..d31ee2d210 100644
--- a/doc/src/sgml/ref/pg_dump.sgml
+++ b/doc/src/sgml/ref/pg_dump.sgml
@@ -73,6 +73,21 @@ PostgreSQL documentation
    architectures.
   </para>
 
+  <figure id="pg_dump_svg">
+   <title><command>pg_dump</command>: Formats and Restore Proceedings</title>
+   <indexterm><primary>pg_dump</primary>
+              <secondary>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>
    When used with one of the archive file formats and combined with
    <application>pg_restore</application>,
diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml
index 8ef2ac8010..194e53d111 100644
--- a/doc/src/sgml/storage.sgml
+++ b/doc/src/sgml/storage.sgml
@@ -775,6 +775,19 @@ data. Empty in ordinary tables.</entry>
 </tgroup>
 </table>
 
+ <figure id="PageLayoutSVG">
+  <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-common.xsl b/doc/src/sgml/stylesheet-common.xsl
index 6d26e7e5c9..c95b64f212 100644
--- a/doc/src/sgml/stylesheet-common.xsl
+++ b/doc/src/sgml/stylesheet-common.xsl
@@ -86,4 +86,28 @@
   <xsl:text>?</xsl:text>
 </xsl:template>
 
+
+<!--  List of Figures and more  -->
+<xsl:template match="/book/part/appendix[@id='list-of-figures']/para">
+  <xsl:call-template name="list.of.titles">
+    <xsl:with-param name="titles" select="'figure'"/>
+    <xsl:with-param name="nodes" select="//figure"/>
+  </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="/book/part/appendix[@id='list-of-tables']/para">
+  <xsl:call-template name="list.of.titles">
+    <xsl:with-param name="titles" select="'table'"/>
+    <xsl:with-param name="nodes" select="//table"/>
+  </xsl:call-template>
+</xsl:template>
+
+<xsl:template match="/book/part/appendix[@id='list-of-examples']/para">
+  <xsl:call-template name="list.of.titles">
+    <xsl:with-param name="titles" select="'example'"/>
+    <xsl:with-param name="nodes" select="//example"/>
+  </xsl:call-template>
+</xsl:template>
+
+
 </xsl:stylesheet>
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/stylesheet-speedup-common.xsl b/doc/src/sgml/stylesheet-speedup-common.xsl
index e3fb582a1c..93a4251496 100644
--- a/doc/src/sgml/stylesheet-speedup-common.xsl
+++ b/doc/src/sgml/stylesheet-speedup-common.xsl
@@ -91,6 +91,19 @@
   </xsl:choose>
 </xsl:template>
 
+<!--  pure sequential numbering of figures ('pg_dump' and others does not have a chapter number)  -->
+<xsl:template match="figure" mode="label.markup">
+  <xsl:choose>
+    <xsl:when test="@label">
+      <xsl:value-of select="@label"/>
+    </xsl:when>
+    <xsl:otherwise>
+     <!-- Use simple sequential numbering within a book -->
+     <xsl:number format="1" from="book" level="any"/>
+    </xsl:otherwise>
+  </xsl:choose>
+</xsl:template>
+
 <!-- from common/l10n.xsl -->
 
 <!-- Just hardcode the language for the whole document, to make it faster. -->
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:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:28px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_comment {font-style:italic;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:&quot;Open Sans&quot;, 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/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:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:28px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_comment {font-style:italic;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:&quot;Open Sans&quot;, 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/pgDump_Inkscape.svg b/doc/src/sgml/svg/Inkscape/pgDump_Inkscape.svg
new file mode 100644
index 0000000000..3e74b485a0
--- /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:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:28px;
+                 font-family:&quot;Open Sans&quot;, sans-serif;
+                 fill:black;
+                }
+  .text_comment {font-style:italic;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:&quot;Open Sans&quot;, 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="50" y="60" class="text_normal" id="text35">pg_dump, script 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 archive 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..cf504ad640
--- /dev/null
+++ b/doc/src/sgml/svg/PageLayout.svg
@@ -0,0 +1,70 @@
+<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/gin.svg b/doc/src/sgml/svg/gin.svg
new file mode 100644
index 0000000000..8a5e77b252
--- /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/pgDump.svg b/doc/src/sgml/svg/pgDump.svg
new file mode 100644
index 0000000000..511a7f1c45
--- /dev/null
+++ b/doc/src/sgml/svg/pgDump.svg
@@ -0,0 +1,96 @@
+<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="50" y="60" class="text_normal">pg_dump, script 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 archive 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>
+

Reply via email to