Re: First SVG graphic
От | Tatsuo Ishii |
---|---|
Тема | Re: First SVG graphic |
Дата | |
Msg-id | 20190124.100921.470435917664165196.t-ishii@sraoss.co.jp обсуждение исходный текст |
Ответ на | Re: First SVG graphic (Bruce Momjian <bruce@momjian.us>) |
Список | pgsql-docs |
> On Mon, Jan 21, 2019 at 03:02:43PM +0100, Jürgen Purtz wrote: >> The attached patch contains all necessary changes to the sgml, svg, and >> Makefile. (Possibly we need some more changes regarding the 'install*' tasks >> of Makefile.) How to go on? Shall I send the patch to a different list or to >> Commitfest 2019-03? > > This is a pretty complicated issue with a lot of back-story. I am > thinking Tatsuo or me will probably commit it before March. Maybe I am missing in the discussion, but I realized that the patch does not include something like "figure number". I think it would be convenient for users to find that in the index. BTW, the patch has some trailing spaces. Best regards, -- Tatsuo Ishii SRA OSS, Inc. Japan English: http://www.sraoss.co.jp/index_en.php Japanese:http://www.sraoss.co.jp > --------------------------------------------------------------------------- > > >> >> Kind regards >> >> Jürgen Purtz >> >> >> On 17.01.19 23:43, Tatsuo Ishii wrote: >> >>>Thanks to an additional template created by Alexander Lakhin, which extends the >> >>>'nochunk' stylesheet for SVG and MathML processing, it is now possible to >> >>>create the "single HTML file" of our documentation including SVG. For me this >> >>>is a working solution as long as we use Docbook 4. After the migration to >> >>>Docbook 5, both languages as well as full namespace support will be natively >> >>>included in Docbook. >> >>> >> >>>Does anyone faced some more problems? Or can we start to include the three >> >>>first SVG graphics into PG's documentation? >> >>OK, the wiki pages look good, as do the diagrams, and I think you have >> >>the process we all agreed with. Should we move ahead and commit some of >> >>these diagrams to the souce tree for PG 12? >> >Yes, I think we should. >> > >> >Best regards, >> >-- >> >Tatsuo Ishii >> >SRA OSS, Inc. Japan >> >English: http://www.sraoss.co.jp/index_en.php >> >Japanese:http://www.sraoss.co.jp >> > >> > > >> diff --git a/doc/src/sgml/Makefile b/doc/src/sgml/Makefile >> index 8326c7c673..27d1e674f4 100644 >> --- a/doc/src/sgml/Makefile >> +++ b/doc/src/sgml/Makefile >> @@ -57,6 +57,8 @@ GENERATED_SGML = version.sgml \ >> >> ALLSGML := $(wildcard $(srcdir)/*.sgml $(srcdir)/ref/*.sgml) $(GENERATED_SGML) >> >> +SVGSRC := $(wildcard $(srcdir)/svg/*.svg) >> + >> >> ## >> ## Man pages >> @@ -125,10 +127,12 @@ endif >> >> html: html-stamp >> >> -html-stamp: stylesheet.xsl postgres.sgml $(ALLSGML) >> +html-stamp: stylesheet.xsl postgres.sgml $(ALLSGML) $(SVGSRC) >> $(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^) >> $(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) $(wordlist 1,2,$^) >> cp $(srcdir)/stylesheet.css html/ >> + $(MKDIR_P) html/svg >> + cp $(SVGSRC) html/svg >> touch $@ >> >> htmlhelp: stylesheet-hh.xsl postgres.sgml $(ALLSGML) >> @@ -136,7 +140,7 @@ htmlhelp: stylesheet-hh.xsl postgres.sgml $(ALLSGML) >> $(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(wordlist 1,2,$^) >> >> # single-page HTML >> -postgres.html: stylesheet-html-nochunk.xsl postgres.sgml $(ALLSGML) >> +postgres.html: stylesheet-html-nochunk.xsl postgres.sgml $(ALLSGML) $(SVGSRC) >> $(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^) >> $(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) $(XSLTPROC_HTML_FLAGS) -o $@ $(wordlist 1,2,$^) >> >> @@ -152,15 +156,15 @@ postgres.txt: postgres.html >> postgres.pdf: >> $(error Invalid target; use postgres-A4.pdf or postgres-US.pdf as targets) >> >> -%-A4.fo: stylesheet-fo.xsl %.sgml $(ALLSGML) >> +%-A4.fo: stylesheet-fo.xsl %.sgml >> $(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^) >> $(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) --stringparam paper.type A4 -o $@ $(wordlist 1,2,$^) >> >> -%-US.fo: stylesheet-fo.xsl %.sgml $(ALLSGML) >> +%-US.fo: stylesheet-fo.xsl %.sgml >> $(XMLLINT) $(XMLINCLUDE) --noout --valid $(word 2,$^) >> $(XSLTPROC) $(XMLINCLUDE) $(XSLTPROCFLAGS) --stringparam paper.type USletter -o $@ $(wordlist 1,2,$^) >> >> -%.pdf: %.fo >> +%.pdf: %.fo $(ALLSGML) $(SVGSRC) >> $(FOP) -fo $< -pdf $@ >> >> >> @@ -169,7 +173,7 @@ postgres.pdf: >> ## >> >> epub: postgres.epub >> -postgres.epub: postgres.sgml $(ALLSGML) >> +postgres.epub: postgres.sgml $(ALLSGML) $(SVGSRC) >> $(XMLLINT) --noout --valid $< >> $(DBTOEPUB) $< >> >> @@ -209,7 +213,7 @@ check: postgres.sgml $(ALLSGML) check-tabs >> install: install-html install-man >> >> installdirs: >> - $(MKDIR_P) '$(DESTDIR)$(htmldir)'/html $(addprefix '$(DESTDIR)$(mandir)'/man, 1 3 $(sqlmansectnum)) >> + $(MKDIR_P) '$(DESTDIR)$(htmldir)'/html/svg html/svg $(addprefix '$(DESTDIR)$(mandir)'/man, 1 3 $(sqlmansectnum)) >> >> # If the install used a man directory shared with other applications, this will remove all files. >> uninstall: >> diff --git a/doc/src/sgml/gin.sgml b/doc/src/sgml/gin.sgml >> index cc7cd1ed2c..195e385798 100644 >> --- a/doc/src/sgml/gin.sgml >> +++ b/doc/src/sgml/gin.sgml >> @@ -453,6 +453,17 @@ >> key values for different columns can be of different types. >> </para> >> >> + <para> >> + <mediaobject id="gin-trees-and-lists"> >> + <imageobject role="html"> >> + <imagedata fileref="svg/gin.svg" format="SVG" align="center" /> >> + </imageobject> >> + <imageobject role="fo"> >> + <imagedata fileref="svg/gin.svg" format="SVG" scale="70" /> >> + </imageobject> >> + </mediaobject> >> + </para> >> + >> <sect2 id="gin-fast-update"> >> <title>GIN Fast Update Technique</title> >> >> diff --git a/doc/src/sgml/ref/pg_dump.sgml b/doc/src/sgml/ref/pg_dump.sgml >> index 9e0bb93f08..1fd9ced5f5 100644 >> --- a/doc/src/sgml/ref/pg_dump.sgml >> +++ b/doc/src/sgml/ref/pg_dump.sgml >> @@ -73,6 +73,17 @@ PostgreSQL documentation >> architectures. >> </para> >> >> + <para> >> + <mediaobject id="pg-dump-svg"> >> + <imageobject role="html"> >> + <imagedata fileref="svg/pgDump.svg" format="SVG" align="center" /> >> + </imageobject> >> + <imageobject role="fo"> >> + <imagedata fileref="svg/pgDump.svg" format="SVG" scale="70" /> >> + </imageobject> >> + </mediaobject> >> + </para> >> + >> <para> >> When used with one of the archive file formats and combined with >> <application>pg_restore</application>, >> diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml >> index 8ef2ac8010..4d39ceb958 100644 >> --- a/doc/src/sgml/storage.sgml >> +++ b/doc/src/sgml/storage.sgml >> @@ -775,6 +775,17 @@ data. Empty in ordinary tables.</entry> >> </tgroup> >> </table> >> >> + <para> >> + <mediaobject id="PageLayoutSVG"> >> + <imageobject role="html"> >> + <imagedata fileref="svg/PageLayout.svg" format="SVG" align="center" /> >> + </imageobject> >> + <imageobject role="fo"> >> + <imagedata fileref="svg/PageLayout.svg" format="SVG" scale="70" /> >> + </imageobject> >> + </mediaobject> >> + </para> >> + >> <para> >> >> The first 24 bytes of each page consists of a page header >> diff --git a/doc/src/sgml/stylesheet-html-nochunk.xsl b/doc/src/sgml/stylesheet-html-nochunk.xsl >> index ffd2012e91..9e756708f5 100644 >> --- a/doc/src/sgml/stylesheet-html-nochunk.xsl >> +++ b/doc/src/sgml/stylesheet-html-nochunk.xsl >> @@ -9,4 +9,27 @@ >> <xsl:include href="stylesheet-html-common.xsl" /> >> <xsl:include href="stylesheet-speedup-xhtml.xsl" /> >> >> +<!-- >> + Integrate SVG and MathML files into the nochunk version (one single HTML file). >> + After migrating to Docbook 5.x this template becomes superfluous. >> +--> >> +<xsl:template match="imagedata"> >> + <xsl:variable name="filename"> >> + <xsl:call-template name="mediaobject.filename"> >> + <xsl:with-param name="object" select=".."/> >> + </xsl:call-template> >> + </xsl:variable> >> + >> + <xsl:choose> >> + <!-- Handle MathML and SVG markup in imagedata --> >> + <xsl:when xmlns:mml="http://www.w3.org/1998/Math/MathML" test="mml:*"> >> + <xsl:apply-templates/> >> + </xsl:when> >> + <xsl:when xmlns:svg="http://www.w3.org/2000/svg" test="svg:*"> >> + <xsl:apply-templates/> >> + </xsl:when> >> + </xsl:choose> >> + <xsl:copy-of select="document($filename)"/> >> +</xsl:template> >> + >> </xsl:stylesheet> >> diff --git a/doc/src/sgml/svg/Inkscape/PageLayout_Inkscape.svg b/doc/src/sgml/svg/Inkscape/PageLayout_Inkscape.svg >> new file mode 100644 >> index 0000000000..5803077781 >> --- /dev/null >> +++ b/doc/src/sgml/svg/Inkscape/PageLayout_Inkscape.svg >> @@ -0,0 +1,81 @@ >> +<?xml version="1.0" encoding="UTF-8" standalone="no"?> >> +<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"width="580" height="280" viewBox="0 0 580 280" version="1.1"id="svg53" sodipodi:docname="PageLayout_Inkscape.svg" inkscape:version="0.92.3 (2405546, 2018-03-11)"> >> + <metadata id="metadata57"> >> + <rdf:RDF> >> + <cc:Work rdf:about=""> >> + <dc:format>image/svg+xml</dc:format> >> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> >> + <dc:title></dc:title> >> + </cc:Work> >> + </rdf:RDF> >> + </metadata> >> + <sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10"guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480"id="namedview55" showgrid="false" inkscape:zoom="1.2896552" inkscape:cx="329.04306" inkscape:cy="137.84105"inkscape:current-layer="svg53" /> >> + <style type="text/css" id="style2"> >> + .text_small {font-style:normal; >> + font-weight:normal; >> + font-size:11px; >> + font-family:"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/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/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:"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="50" y="60" class="text_normal" id="text35">pg_dump, script format</text> >> + <path d="m210 70 h-138 v40" fill="none" stroke="black" marker-end="url(#a)" id="path37" /> >> + <text x="340" y="60" class="text_normal" id="text39">pg_dump, other archive formats</text> >> + <path d="m340 70 h155 v40" fill="none" stroke="black" marker-end="url(#a)" id="path41" /> >> + <!-- SQL script --> >> + <g transform="translate(20 120)" id="g49"> >> + <use xlink:href="#disc" id="use43" /> >> + <text x="10" y="60" class="text_normal" id="text45">SQL INSERT</text> >> + <text x="10" y="75" class="text_normal" id="text47">commands</text> >> + </g> >> + <text x="130" y="285" class="text_normal" id="text51">psql</text> >> + <path d="m72 240 v55 h130" fill="none" stroke="black" marker-end="url(#a)" id="path53" /> >> + <!-- Binary dump --> >> + <g transform="translate(440 120)" id="g61"> >> + <use xlink:href="#disc" id="use55" /> >> + <text x="30" y="60" class="text_normal" id="text57">Binary</text> >> + <text x="35" y="75" class="text_normal" id="text59">File(s)</text> >> + </g> >> + <text x="370" y="285" class="text_normal" id="text63">pg_restore</text> >> + <path d="m495 240 v55 h-155" fill="none" stroke="black" marker-end="url(#a)" id="path65" /> >> + <!-- New DB --> >> + <g transform="translate(220 230)" id="g73"> >> + <use xlink:href="#disc" id="use67" /> >> + <text x="20" y="60" class="text_normal" id="text69">Restored</text> >> + <text x="18" y="75" class="text_normal" id="text71">Database</text> >> + </g> >> +</svg> >> diff --git a/doc/src/sgml/svg/PageLayout.svg b/doc/src/sgml/svg/PageLayout.svg >> new file mode 100644 >> index 0000000000..cf504ad640 >> --- /dev/null >> +++ b/doc/src/sgml/svg/PageLayout.svg >> @@ -0,0 +1,70 @@ >> +<svg width="580" height="280" viewBox="0 0 580 280" version="1.1" xmlns="http://www.w3.org/2000/svg"> >> + <style type="text/css"> >> + .text_small {font-style:normal; >> + font-weight:normal; >> + font-size:11px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_normal {font-style:normal; >> + font-weight:normal; >> + font-size:14px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_big {font-style:normal; >> + font-weight:normal; >> + font-size:28px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_comment {font-style:italic; >> + font-weight:normal; >> + font-size:14px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_mono {font-style:normal; >> + font-weight:normal; >> + font-size:14px; >> + font-family:monospace, monospace; >> + white-space:pre; >> + fill:black; >> + } >> + </style> >> + <defs> >> + <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5"> >> + <path d="m0 0 10 5-10 5 3-5z"/> >> + </marker> >> + </defs> >> + >> +<!-- border and background --> >> + <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%" >> + fill="whitesmoke" stroke="#CCCCCC" /> <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> --> >> +<!-- outer rectangle and texts --> >> + <rect x="20" y="80" width="500" height="150" fill="white" stroke="black"/> >> + <text class="text_big" x="178" y="50">Page Layout</text> >> + <text class="text_mono" x="540" y="125" transform="rotate(90 540 125)">8 k B</text> >> + <text class="text_normal" x="392" y="144">Free space</text> >> +<!-- first line --> >> + <rect x="20" y="80" width="90" height="30" fill="lime" stroke="black"/> >> + <text class="text_normal" x="30" y="100">Header</text> >> + <rect x="110" y="80" width="60" height="30" fill="cornflowerblue" stroke="black"/> >> + <text class="text_normal" x="115" y="100">ItemId</text> >> + <rect x="170" y="80" width="60" height="30" fill="cornflowerblue" stroke="black"/> >> + <text class="text_normal" x="175" y="100">ItemId</text> >> + <path d="m235 95h78" style="marker-end:url(#a);stroke-dasharray:5, 5" stroke="black"/> >> + <path d="m184 105-71 85" style="marker-end:url(#a)" fill="none" stroke="black"/> >> + <path d="m138 105 202 85" style="marker-end:url(#a)" fill="none" stroke="black"/> >> +<!-- last line --> >> + <path d="m100 215h-30" style="marker-end:url(#a);stroke-dasharray:5, 5" stroke="black"/> >> + <rect x="105" y="200" width="245" height="30" style="fill:#80BFFF" stroke="black"/> <!-- fill:hsl(210, 100%, 75%) --> >> + <text class="text_normal" x="121" y="220">Item</text> >> + <rect x="345" y="200" width="85" height="30" style="fill:#80BFFF" stroke="black"/> <!-- fill:hsl(210, 100%, 75%) --> >> + <text class="text_normal" x="352" y="220">Item</text> >> + <rect x="430" y="200" width="90" height="30" style="fill:springgreen" stroke="black"/> >> + <text class="text_normal" x="440" y="220">Special</text> >> +<!-- explanation --> >> + <text class="text_small" x="100" y="260">Content grows from start to center and from end to center.</text> >> +</svg> >> + >> diff --git a/doc/src/sgml/svg/gin.svg b/doc/src/sgml/svg/gin.svg >> new file mode 100644 >> index 0000000000..8a5e77b252 >> --- /dev/null >> +++ b/doc/src/sgml/svg/gin.svg >> @@ -0,0 +1,123 @@ >> +<svg width="580" height="320" viewBox="0 0 580 320" version="1.1" xmlns="http://www.w3.org/2000/svg"> >> + <style type="text/css"> >> + .text_small {font-style:normal; >> + font-weight:normal; >> + font-size:11px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_normal {font-style:normal; >> + font-weight:normal; >> + font-size:14px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_big {font-style:normal; >> + font-weight:normal; >> + font-size:28px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_comment {font-style:italic; >> + font-weight:normal; >> + font-size:14px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_mono {font-style:normal; >> + font-weight:normal; >> + font-size:14px; >> + font-family:monospace, monospace; >> + white-space:pre; >> + fill:black; >> + } >> + </style> >> + <defs> >> + <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5"> >> + <path d="m0 0 10 5-10 5 3-5z"/> >> + </marker> >> + </defs> >> +<!-- border and background --> >> + <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%" >> + fill="whitesmoke" stroke="#CCCCCC" /> <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> --> >> + >> +<!-- Meta page --> >> + <rect x="30" y="50" width="80" height="40" fill="white" stroke="black"/> >> + <text class="text_normal" x="32" y="65">Meta page</text> >> + >> +<!-- Entry tree --> >> + <rect x="181" y="19" width="209" height="160" fill="white" stroke="black"/> >> + <text class="text_normal" x="186" y="35">Entry tree</text> >> + <path d="m110 70h83" style="marker-end:url(#a)" stroke="black"/> >> + <rect x="206" y="64" width="25" height="10" style="fill:lightgrey" stroke="black"/> >> + <path d="m231 65 11-12" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m231 69 11 9" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m231 73 14 35" style="marker-end:url(#a)" stroke="black"/> >> + <rect x="251" y="39" width="25" height="10" style="fill:lightgrey" stroke="black"/> >> + <rect x="251" y="79" width="25" height="10" style="fill:lightgrey" stroke="black"/> >> + <rect x="251" y="119" width="25" height="10" style="fill:lightgrey" stroke="black"/> >> + <path d="m266 49v18" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m266 89v18" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m276 44 32 -5" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m276 44 32 15" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m276 84 32 8" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m276 124 32 0" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m276 124 32 23" style="marker-end:url(#a)" stroke="black"/> >> + <rect x="320" y="30" width="25" height="10" style="fill:green" stroke="black"/> >> + <rect x="320" y="60" width="25" height="10" style="fill:limegreen" stroke="black"/> >> + <rect x="320" y="90" width="25" height="10" style="fill:green" stroke="black"/> >> + <rect x="320" y="120" width="25" height="10" style="fill:limegreen" stroke="black"/> >> + <rect x="320" y="150" width="25" height="10" style="fill:limegreen" stroke="black"/> >> + <path d="m331 40v6" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m331 70v6" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m331 100v6" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m331 130v6" style="marker-end:url(#a)" stroke="black"/> >> + >> + >> +<!-- Posting tree 1 --> >> + <rect x="430" y="10" width="115" height="70" fill="white" stroke="black"/> >> + <text class="text_normal" x="440" y="26">Posting tree</text> >> + <path d="m345 35 83 14" style="marker-end:url(#a)" stroke="black"/> >> + <rect x="440" y="45" width="25" height="10" style="fill:lightgrey" stroke="black"/> >> + <path d="m465 50 30 -9" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m465 50 30 18" style="marker-end:url(#a)" stroke="black"/> >> + <rect x="505" y="35" width="25" height="10" style="fill:limegreen" stroke="black"/> >> + <rect x="505" y="65" width="25" height="10" style="fill:limegreen" stroke="black"/> >> + <path d="m515 47v8" style="marker-end:url(#a)" stroke="black"/> >> + >> +<!-- Posting tree 2 --> >> + <rect x="430" y="100" width="115" height="70" fill="white" stroke="black"/> >> + <text class="text_normal" x="440" y="115">Posting tree</text> >> + <path d="m345 95 148 37" style="marker-end:url(#a)" stroke="black"/> >> + <rect x="505" y="130" width="25" height="10" style="fill:limegreen" stroke="black"/> >> + >> +<!-- Posting tree 3 --> >> + <rect x="430" y="190" width="115" height="70" fill="white" stroke="black"/> >> + <text class="text_normal" x="440" y="205">Posting tree</text> >> + <path d="m345 95 85 125" style="marker-end:url(#a)" stroke="black"/> >> + <rect x="440" y="225" width="25" height="10" style="fill:lightgrey" stroke="black"/> >> + <path d="m465 230 30 -9" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m465 230 30 18" style="marker-end:url(#a)" stroke="black"/> >> + <rect x="505" y="215" width="25" height="10" style="fill:limegreen" stroke="black"/> >> + <rect x="505" y="245" width="25" height="10" style="fill:limegreen" stroke="black"/> >> + <path d="m515 227v8" style="marker-end:url(#a)" stroke="black"/> >> + >> +<!-- Pending list --> >> + <rect x="30" y="215" width="360" height="45" fill="white" stroke="black"/> >> + <text class="text_normal" x="37" y="232">Pending list</text> >> + <path d="m70 90 77 138" style="fill:none;marker-end:url(#a)" stroke="black"/> >> + <rect x="155" y="235" width="25" height="10" style="fill:orangered" stroke="black"/> >> + <rect x="210" y="235" width="25" height="10" style="fill:orangered" stroke="black"/> >> + <rect x="265" y="235" width="25" height="10" style="fill:orangered" stroke="black"/> >> + <rect x="320" y="235" width="25" height="10" style="fill:orangered" stroke="black"/> >> + <path d="m180 240h18" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m235 240h18" style="marker-end:url(#a)" stroke="black"/> >> + <path d="m290 240h18" style="marker-end:url(#a)" stroke="black"/> >> + >> +<!-- Explanation --> >> + <rect x="30" y="291" width="25" height="10" fill="green" stroke="black"/> >> + <text class="text_small" x="60" y="300">Pointers to Posting tree</text> >> + <rect x="230" y="291" width="25" height="10" fill="limegreen" stroke="black"/> >> + <text class="text_small" x="260" y="300">Heap pointers (in Posting list or Posting tree)</text> >> + >> +</svg> >> diff --git a/doc/src/sgml/svg/pgDump.svg b/doc/src/sgml/svg/pgDump.svg >> new file mode 100644 >> index 0000000000..33e4a7d467 >> --- /dev/null >> +++ b/doc/src/sgml/svg/pgDump.svg >> @@ -0,0 +1,96 @@ >> +<svg width="580" height="370" viewBox="0 0 580 370" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> >> + <style type="text/css"> >> + .text_small {font-style:normal; >> + font-weight:normal; >> + font-size:11px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_normal {font-style:normal; >> + font-weight:normal; >> + font-size:14px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_big {font-style:normal; >> + font-weight:normal; >> + font-size:28px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_comment {font-style:italic; >> + font-weight:normal; >> + font-size:14px; >> + font-family:"Open Sans", sans-serif; >> + fill:black; >> + } >> + .text_mono {font-style:normal; >> + font-weight:normal; >> + font-size:14px; >> + font-family:monospace, monospace; >> + white-space:pre; >> + fill:black; >> + } >> + </style> >> + <defs> >> + <marker id="a" markerHeight="10" markerWidth="10" orient="auto" refY="5"> >> + <path d="m0 0 10 5 -10 5 3 -5z"/> >> + </marker> >> + >> + <linearGradient id="gradient_disc" x1="0%" y1="0%" x2="100%" y2="0%"> >> + <stop offset="10%" style="stop-color:white" /> >> + <stop offset="90%" style="stop-color:steelblue" /> >> + </linearGradient> >> + >> + <symbol id="disc" fill="url(#gradient_disc)" stroke="black"> >> + <ellipse cx="52" cy="100" rx="50" ry="12" /> <!-- bottom --> >> + <!-- hide upper half of bottom. use <rect> instead of <clipPath> to support gradient --> >> + <rect x="2" y="20" width="100" height="80" stroke-width="0" /> >> + <ellipse cx="52" cy="20" rx="50" ry="12"/> <!-- top --> >> + <path d="m2 21 v80"/> <!-- left --> >> + <path d="m102 21 v80"/> <!-- right --> >> + </symbol> >> + </defs> >> + >> +<!-- border and background --> >> + <rect x="1" y="1" width="99.4%" height="99.4%" rx="1%" >> + fill="whitesmoke" stroke="#CCCCCC" /> <!-- fill="hsl(0, 0%, 97%)" stroke="hsl(0, 0%, 80%)" /> --> >> + >> + <!-- Original DB --> >> + <g transform="translate(220 10)"> >> + <use xlink:href="#disc" /> >> + <text x="25" y="60" class="text_normal">Original</text> >> + <text x="18" y="75" class="text_normal">Database</text> >> + </g> >> + <text x="50" y="60" class="text_normal">pg_dump, script format</text> >> + <path d="m210 70 h-138 v40" fill="none" stroke="black" marker-end="url(#a)"/> >> + <text x="340" y="60" class="text_normal">pg_dump, other archive formats</text> >> + <path d="m340 70 h155 v40" fill="none" stroke="black" marker-end="url(#a)"/> >> + >> + <!-- SQL script --> >> + <g transform="translate(20 120)"> >> + <use xlink:href="#disc"/> >> + <text x="10" y="60" class="text_normal">SQL INSERT</text> >> + <text x="10" y="75" class="text_normal">commands</text> >> + </g> >> + <text x="130" y="285" class="text_normal">psql</text> >> + <path d="m72 240 v55 h130" fill="none" stroke="black" marker-end="url(#a)"/> >> + >> + <!-- Binary dump --> >> + <g transform="translate(440 120)"> >> + <use xlink:href="#disc"/> >> + <text x="30" y="60" class="text_normal">Binary</text> >> + <text x="35" y="75" class="text_normal">File(s)</text> >> + </g> >> + <text x="370" y="285" class="text_normal">pg_restore</text> >> + <path d="m495 240 v55 h-155" fill="none" stroke="black" marker-end="url(#a)"/> >> + >> + <!-- New DB --> >> + <g transform="translate(220 230)"> >> + <use xlink:href="#disc"/> >> + <text x="20" y="60" class="text_normal">Restored</text> >> + <text x="18" y="75" class="text_normal">Database</text> >> + </g> >> + >> +</svg> >> + > > > -- > Bruce Momjian <bruce@momjian.us> http://momjian.us > EnterpriseDB http://enterprisedb.com > > + As you are, so once was I. As I am, so you will be. + > + Ancient Roman grave inscription + >
В списке pgsql-docs по дате отправления:
Следующее
От: Bruce MomjianДата:
Сообщение: Re: Need clarification on how to extract or compare numeric valuesenclosed in jsonb