The attached patch contains all necessary changes to the sgml, svg, and Makefile. (Possibly we need some more changes regarding the 'install*' tasks of Makefile.) How to go on? Shall I send the patch to a different list or to Commitfest 2019-03?

Kind regards

Jürgen Purtz


On 17.01.19 23:43, Tatsuo Ishii wrote:
Thanks to an additional template created by Alexander Lakhin, which extends the
'nochunk' stylesheet for SVG and MathML processing, it is now possible to
create the "single HTML file" of our documentation including SVG. For me this
is a working solution as long as we use Docbook 4. After the migration to
Docbook 5, both languages as well as full namespace support will be natively
included in Docbook.

Does anyone faced some more problems? Or can we start to include the three
first SVG graphics into PG's documentation?
OK, the wiki pages look good, as do the diagrams, and I think you have
the process we all agreed with.  Should we move ahead and commit some of
these diagrams to the souce tree for PG 12?
Yes, I think we should.

Best regards,
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese:http://www.sraoss.co.jp


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/gin.sgml b/doc/src/sgml/gin.sgml
index cc7cd1ed2c..195e385798 100644
--- a/doc/src/sgml/gin.sgml
+++ b/doc/src/sgml/gin.sgml
@@ -453,6 +453,17 @@
   key values for different columns can be of different types.
  </para>
 
+ <para>
+  <mediaobject id="gin-trees-and-lists">
+   <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>
+ </para>
+
  <sect2 id="gin-fast-update">
   <title>GIN Fast Update Technique</title>
 
diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml
index 9e0bb93f08..1fd9ced5f5 100644
--- a/doc/src/sgml/ref/pg_dump.sgml
+++ b/doc/src/sgml/ref/pg_dump.sgml
@@ -73,6 +73,17 @@ PostgreSQL documentation
    architectures.
   </para>
 
+  <para>
+   <mediaobject id="pg-dump-svg">
+    <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>
+  </para>
+
   <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..4d39ceb958 100644
--- a/doc/src/sgml/storage.sgml
+++ b/doc/src/sgml/storage.sgml
@@ -775,6 +775,17 @@ data. Empty in ordinary tables.</entry>
 </tgroup>
 </table>
 
+ <para>
+  <mediaobject id="PageLayoutSVG">
+   <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>
+ </para>
+
  <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/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..33e4a7d467
--- /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