Re: First SVG graphic

Jürgen Purtz <[email protected]>
Newsgroups gmane.comp.db.postgresql.devel.documentation
Message-ID <[email protected]>
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
firstSvg_2.patch (text/x-patch, 43.2 KB)
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>
+
Screenshot_Lists.png (image/png, 11.8 KB) - not displayed
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.