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