On 07.02.19 12:06, Peter Eisentraut wrote:

First, let's fix some of these whitespace errors:

firstSvg_2.patch:677: trailing whitespace.
   <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%"
firstSvg_2.patch:752: trailing whitespace.
   <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%"
firstSvg_2.patch:705: new blank line at EOF.
+
firstSvg_2.patch:936: new blank line at EOF.
+
warning: 4 lines add whitespace errors.

Done.

Let's not use mixed-case file names:

Inkscape/
PageLayout.svg
gin.svg
pgDump.svg
Done.
@@ -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 $@

This seems a bit wrong.  The .fo target does depend on ALLSGML.  The
.pdf target does not, but it presumably does depend on SVGSRC.
It's a transitive dependency: the pdf target is triggered after changes in svg (or sgml), this triggers the fo targets. Therefore it's not necessary to have svg (or sgml) dependencies at the fo level.
The variable name SVGSRC is a bit confusing.  What is it the source of?
The variable SVGSRC points to all svg-files, similar to ALLSGML which points to the sgml files. Whenever any of them changes, certain targets will fire.
@@ -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:
html/svg is not an installation directory.  You need to create it
somewhere else.
Please help. I haven't understood the distinction between installation directory and DESTDIR. On the other hand, in the Makefile there is a - redundant - command within the html-stamp target: $(MKDIR_P) html/svg. But this will run frequently, which is not necessary.
+ <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>
These ought to be created by the stylesheet.  We have probably turned
them off somewhere, so you should see where you can turn them on.

There is a simple mechanism to create those list of figures: change line 55 of stylesheet-html-common.xsl to "book toc,title,*figure*". But the result is ugly - see attached screenshot. The list is out-of-line. Additionally, in the future we will have many figures (and examples and tables). This will lead to similar problems we actually faced with the release notes. The proposed solution moves this inflation of lists to deeper levels of the TOC. We can and have defined theirs layout within stylesheet-common.xsl.

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 @@
     architectures.
    </para>

+  <figure id="pg_dump_svg">
+   <title><command>pg_dump</command>: Formats and Restore Proceedings</title>
This doesn't work for man page output.

I think we should avoid putting images into reference pages.  This one
could perhaps go into the Backup chapter.

What is the problem here? Actually I don't have enough time to evaluate it in deep. If it is an urgent problem (I have seen that the commitfest-entry is tagged as "release 12") we shall shift the pg_dump figure to a later release.

I think that the Backup chapter isn't a good place for this because it does not explain the complete interaction between pg_dump, psql and restore.

Also, it should be linked to from somewhere.  An image that's just
floating around and not referred to in the text seems odd.

Also we tend to use hyphens instead of underscores for IDs.  (At some
point, underscores where not allowed.  I'm surprised that that's no
longer the case.)
Done. (But I hate the use of the minus-signs within any identifier of any language. For me it's an operator.)
   I also wouldn't put "_svg" into the ID.  The format
is irrelevant to the ID.

I changed _svg to _figure. I agree that the format is irrelevant. But it may be of interest, whether it is an id to a text or a figure.


Kind regards, Jürgen


diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile
index 8326c7c673..1179d29096 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 $(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..7e49254afe 100644
--- a/doc/src/sgml/gin.sgml
+++ b/doc/src/sgml/gin.sgml
@@ -453,6 +453,23 @@
   key values for different columns can be of different types.
  </para>
 
+ <figure id="gin-implementation-figure">
+  <title>GIN Overview</title>
+  <indexterm>
+   <primary>index</primary>
+   <secondary>GIN</secondary>
+   <tertiary>GIN (Figure)</tertiary>
+  </indexterm>
+  <mediaobject>
+   <imageobject role="html">
+    <imagedata fileref="svg/gin.svg" format="SVG" align="center" />
+   </imageobject>
+   <imageobject role="fo">
+    <imagedata fileref="svg/gin.svg" format="SVG" scale="70" />
+   </imageobject>
+  </mediaobject>
+ </figure>
+
  <sect2 id="gin-fast-update">
   <title>GIN Fast Update Technique</title>
 
diff --git a/doc/src/sgml/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..a6c91e68ef 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-figure">
+   <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 cbdad0c3fb..d630366a9a 100644
--- a/doc/src/sgml/storage.sgml
+++ b/doc/src/sgml/storage.sgml
@@ -776,6 +776,19 @@ data. Empty in ordinary tables.</entry>
 </tgroup>
 </table>
 
+ <figure id="page-layout-figure">
+  <title>Overall Page Layout</title>
+  <indexterm><primary>Page Layout (Figure)</primary></indexterm>
+  <mediaobject>
+   <imageobject role="html">
+    <imagedata fileref="svg/pagelayout.svg" format="SVG" align="center" />
+   </imageobject>
+   <imageobject role="fo">
+    <imagedata fileref="svg/pagelayout.svg" format="SVG" scale="70" />
+   </imageobject>
+  </mediaobject>
+ </figure>
+
  <para>
 
   The first 24 bytes of each page consists of a page header
diff --git a/doc/src/sgml/stylesheet-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/gin.svg b/doc/src/sgml/svg/gin.svg
new file mode 100644
index 0000000000..9ea11f8b1f
--- /dev/null
+++ b/doc/src/sgml/svg/gin.svg
@@ -0,0 +1,123 @@
+<svg width="580" height="320" viewBox="0 0 580 320" version="1.1" xmlns="http://www.w3.org/2000/svg";>
+  <style type="text/css">
+  .text_small   {font-style:normal;
+                 font-weight:normal;
+                 font-size:11px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:28px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_comment {font-style:italic;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_mono    {font-style:normal;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:monospace, monospace;
+                 white-space:pre;
+                 fill:black;
+                }
+  </style>
+  <defs>
+    <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5">
+      <path d="m0 0 10 5-10 5 3-5z"/>
+    </marker>
+  </defs>
+
+  <!-- border and background -->
+  <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%"
+        fill="whitesmoke" stroke="#CCCCCC" /> <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> -->
+
+  <!-- Meta page -->
+  <rect x="30" y="50" width="80" height="40" fill="white" stroke="black"/>
+  <text class="text_normal" x="32" y="65">Meta page</text>
+
+  <!-- Entry tree -->
+  <rect x="181" y="19" width="209" height="160" fill="white" stroke="black"/>
+  <text class="text_normal" x="186" y="35">Entry tree</text>
+  <path d="m110 70h83" style="marker-end:url(#a)" stroke="black"/>
+  <rect x="206" y="64" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+  <path d="m231 65 11-12" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m231 69 11 9" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m231 73 14 35" style="marker-end:url(#a)" stroke="black"/>
+  <rect x="251" y="39" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+  <rect x="251" y="79" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+  <rect x="251" y="119" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+  <path d="m266 49v18" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m266 89v18" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m276 44 32 -5" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m276 44 32 15" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m276 84 32 8" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m276 124 32 0" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m276 124 32 23" style="marker-end:url(#a)" stroke="black"/>
+  <rect x="320" y="30" width="25" height="10" style="fill:green" stroke="black"/>
+  <rect x="320" y="60" width="25" height="10" style="fill:limegreen" stroke="black"/>
+  <rect x="320" y="90" width="25" height="10" style="fill:green" stroke="black"/>
+  <rect x="320" y="120" width="25" height="10" style="fill:limegreen" stroke="black"/>
+  <rect x="320" y="150" width="25" height="10" style="fill:limegreen" stroke="black"/>
+  <path d="m331 40v6" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m331 70v6" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m331 100v6" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m331 130v6" style="marker-end:url(#a)" stroke="black"/>
+
+  <!-- Posting tree 1 -->
+  <rect x="430" y="10" width="115" height="70" fill="white" stroke="black"/>
+  <text class="text_normal" x="440" y="26">Posting tree</text>
+  <path d="m345 35 83 14" style="marker-end:url(#a)" stroke="black"/>
+  <rect x="440" y="45" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+  <path d="m465 50 30 -9" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m465 50 30 18" style="marker-end:url(#a)" stroke="black"/>
+  <rect x="505" y="35" width="25" height="10" style="fill:limegreen" stroke="black"/>
+  <rect x="505" y="65" width="25" height="10" style="fill:limegreen" stroke="black"/>
+  <path d="m515 47v8" style="marker-end:url(#a)" stroke="black"/>
+
+  <!-- Posting tree 2 -->
+  <rect x="430" y="100" width="115" height="70" fill="white" stroke="black"/>
+  <text class="text_normal" x="440" y="115">Posting tree</text>
+  <path d="m345 95 148 37" style="marker-end:url(#a)" stroke="black"/>
+  <rect x="505" y="130" width="25" height="10" style="fill:limegreen" stroke="black"/>
+
+  <!-- Posting tree 3 -->
+  <rect x="430" y="190" width="115" height="70" fill="white" stroke="black"/>
+  <text class="text_normal" x="440" y="205">Posting tree</text>
+  <path d="m345 95 85 125" style="marker-end:url(#a)" stroke="black"/>
+  <rect x="440" y="225" width="25" height="10" style="fill:lightgrey" stroke="black"/>
+  <path d="m465 230 30 -9" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m465 230 30 18" style="marker-end:url(#a)" stroke="black"/>
+  <rect x="505" y="215" width="25" height="10" style="fill:limegreen" stroke="black"/>
+  <rect x="505" y="245" width="25" height="10" style="fill:limegreen" stroke="black"/>
+  <path d="m515 227v8" style="marker-end:url(#a)" stroke="black"/>
+
+  <!-- Pending list -->
+  <rect x="30" y="215" width="360" height="45" fill="white" stroke="black"/>
+  <text class="text_normal" x="37" y="232">Pending list</text>
+  <path d="m70 90 77 138" style="fill:none;marker-end:url(#a)" stroke="black"/>
+  <rect x="155" y="235" width="25" height="10" style="fill:orangered" stroke="black"/>
+  <rect x="210" y="235" width="25" height="10" style="fill:orangered" stroke="black"/>
+  <rect x="265" y="235" width="25" height="10" style="fill:orangered" stroke="black"/>
+  <rect x="320" y="235" width="25" height="10" style="fill:orangered" stroke="black"/>
+  <path d="m180 240h18" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m235 240h18" style="marker-end:url(#a)" stroke="black"/>
+  <path d="m290 240h18" style="marker-end:url(#a)" stroke="black"/>
+
+  <!-- Explanation -->
+  <rect x="30" y="291" width="25" height="10" fill="green" stroke="black"/>
+  <text class="text_small" x="60" y="300">Pointers to Posting tree</text>
+  <rect x="230" y="291" width="25" height="10" fill="limegreen" stroke="black"/>
+  <text class="text_small" x="260" y="300">Heap pointers (in Posting list or Posting tree)</text>
+
+</svg>
diff --git a/doc/src/sgml/svg/inkscape/gin_inkscape.svg b/doc/src/sgml/svg/inkscape/gin_inkscape.svg
new file mode 100644
index 0000000000..be9a9b4c73
--- /dev/null
+++ b/doc/src/sgml/svg/inkscape/gin_inkscape.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:cc="http://creativecommons.org/ns#"; xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"; xmlns:svg="http://www.w3.org/2000/svg"; xmlns="http://www.w3.org/2000/svg"; xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"; xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"; width="580" height="320" viewBox="0 0 580 320" version="1.1" id="svg139" sodipodi:docname="gin_Inkscape.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)">
+  <metadata id="metadata143">
+    <rdf:RDF>
+      <cc:Work rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview141" showgrid="false" inkscape:zoom="2.5793103" inkscape:cx="356.431" inkscape:cy="207.50734" inkscape:current-layer="svg139" />
+  <style type="text/css" id="style2">
+  .text_small   {font-style:normal;
+                 font-weight:normal;
+                 font-size:11px;
+                 font-family:&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/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/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..223fcaf749
--- /dev/null
+++ b/doc/src/sgml/svg/pagelayout.svg
@@ -0,0 +1,74 @@
+<svg width="580" height="280" viewBox="0 0 580 280" version="1.1" xmlns="http://www.w3.org/2000/svg";>
+  <style type="text/css">
+  .text_small   {font-style:normal;
+                 font-weight:normal;
+                 font-size:11px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:28px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_comment {font-style:italic;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_mono    {font-style:normal;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:monospace, monospace;
+                 white-space:pre;
+                 fill:black;
+                }
+  </style>
+  <defs>
+    <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5">
+      <path d="m0 0 10 5-10 5 3-5z"/>
+    </marker>
+  </defs>
+
+  <!-- border and background -->
+  <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%"
+        fill="whitesmoke" stroke="#CCCCCC" /> <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> -->
+
+  <!-- outer rectangle and texts -->
+  <rect x="20" y="80" width="500" height="150" fill="white" stroke="black"/>
+  <text class="text_big" x="178" y="50">Page Layout</text>
+  <text class="text_mono" x="540" y="125" transform="rotate(90 540 125)">8   k B</text>
+  <text class="text_normal" x="392" y="144">Free space</text>
+
+  <!-- first line -->
+  <rect x="20" y="80" width="90" height="30" fill="lime" stroke="black"/>
+  <text class="text_normal" x="30" y="100">Header</text>
+  <rect x="110" y="80" width="60" height="30" fill="cornflowerblue" stroke="black"/>
+  <text class="text_normal" x="115" y="100">ItemId</text>
+  <rect x="170" y="80" width="60" height="30" fill="cornflowerblue" stroke="black"/>
+  <text class="text_normal" x="175" y="100">ItemId</text>
+  <path d="m235 95h78" style="marker-end:url(#a);stroke-dasharray:5, 5" stroke="black"/>
+  <path d="m184 105-71 85" style="marker-end:url(#a)" fill="none" stroke="black"/>
+  <path d="m138 105 202 85" style="marker-end:url(#a)" fill="none" stroke="black"/>
+
+  <!-- last line -->
+  <path d="m100 215h-30" style="marker-end:url(#a);stroke-dasharray:5, 5" stroke="black"/>
+  <rect x="105" y="200" width="245" height="30" style="fill:#80BFFF" stroke="black"/> <!-- fill:hsl(210, 100%, 75%) -->
+  <text class="text_normal" x="121" y="220">Item</text>
+  <rect x="345" y="200" width="85" height="30" style="fill:#80BFFF" stroke="black"/>  <!-- fill:hsl(210, 100%, 75%) -->
+  <text class="text_normal" x="352" y="220">Item</text>
+  <rect x="430" y="200" width="90" height="30" style="fill:springgreen" stroke="black"/>
+  <text class="text_normal" x="440" y="220">Special</text>
+
+  <!-- explanation -->
+  <text class="text_small" x="100" y="260">Content grows from start to center and from end to center.</text>
+
+</svg>
diff --git a/doc/src/sgml/svg/pgdump.svg b/doc/src/sgml/svg/pgdump.svg
new file mode 100644
index 0000000000..5cf171de0e
--- /dev/null
+++ b/doc/src/sgml/svg/pgdump.svg
@@ -0,0 +1,95 @@
+<svg width="580" height="370" viewBox="0 0 580 370" version="1.1" xmlns="http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/xlink";>
+  <style type="text/css">
+  .text_small   {font-style:normal;
+                 font-weight:normal;
+                 font-size:11px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_normal  {font-style:normal;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_big     {font-style:normal;
+                 font-weight:normal;
+                 font-size:28px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_comment {font-style:italic;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:"Open Sans", sans-serif;
+                 fill:black;
+                }
+  .text_mono    {font-style:normal;
+                 font-weight:normal;
+                 font-size:14px;
+                 font-family:monospace, monospace;
+                 white-space:pre;
+                 fill:black;
+                }
+  </style>
+  <defs>
+    <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5">
+      <path d="m0 0 10 5 -10 5 3 -5z"/>
+    </marker>
+
+    <linearGradient id="gradient_disc" x1="0%" y1="0%" x2="100%" y2="0%">
+      <stop offset="10%" style="stop-color:white" />
+      <stop offset="90%" style="stop-color:steelblue" />
+    </linearGradient>
+
+    <symbol id="disc" fill="url(#gradient_disc)" stroke="black">
+      <ellipse cx="52" cy="100" rx="50" ry="12" /> <!-- bottom -->
+      <!-- hide upper half of bottom. use <rect> instead of <clipPath> to support gradient -->
+      <rect    x="2" y="20" width="100" height="80" stroke-width="0" />
+      <ellipse cx="52" cy="20" rx="50" ry="12"/> <!-- top -->
+      <path    d="m2 21 v80"/>                   <!-- left  -->
+      <path    d="m102 21 v80"/>                 <!-- right -->
+    </symbol>
+  </defs>
+
+  <!-- border and background -->
+  <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%"
+        fill="whitesmoke" stroke="#CCCCCC" /> <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> -->
+
+  <!-- Original DB -->
+  <g transform="translate(220 10)">
+    <use xlink:href="#disc" />
+    <text x="25" y="60" class="text_normal">Original</text>
+    <text x="18" y="75" class="text_normal">Database</text>
+  </g>
+  <text x="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