Re: Getting our tables to render better in PDF output - Mailing list pgsql-docs

From Tom Lane
Subject Re: Getting our tables to render better in PDF output
Date
Msg-id 23574.1581555393@sss.pgh.pa.us
Whole thread Raw
In response to Re: Getting our tables to render better in PDF output  (Alvaro Herrera <alvherre@2ndquadrant.com>)
Responses Re: Getting our tables to render better in PDF output  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-docs
Alvaro Herrera <alvherre@2ndquadrant.com> writes:
> Yeah, it'd look very odd, and certainly the no-parens case makes it
> worse.  I like this end result:

>>     Function               Signature
>>     age                    age(timestamp) → interval
>>     now                    now() → timestamp with time zone
>>     current_timestamp      current_timestamp → timestamp with time zone

I gave that a try, and it seems to work really well.  It can even handle
the ridiculously long signature for make_interval() in reasonable style,
as shown in the screenshot attached.

One problem with the rightarrow idea is that it's not rendering quite
right for me: it looks great in HTML, but in PDF it comes out flush
with the baseline, as you can see in the screenshot.  Hopefully
there's a way to fix that that we can hide in the custom entity ...
but I have no idea how.

I decided to try converting the date/time operators table too, to
see how well this works for that.  It's bulkier than before, but
also (I think) more precise.  I realized that this table actually
had three examples already for float8 * interval, but it wasn't
at all obvious that they were the same operator.  So that aspect
is a lot nicer here.  On the other hand, it seems like the text
descriptions are only marginally useful here.  I can imagine that
they would be useful in some other operator tables, such as
geometric operators, but I'm a bit tempted to leave them out
in this particular table.  The format would adapt to that easily.

Another thing worth considering is removing duplicate left-hand-
column entries, that is, considering all the instances of
similarly-named functions/operators to be "the same".  In the
attached patch, I did that for isfinite() but not anywhere else.
I'm not quite sure if it's a good idea or not.  It seems like it
makes sense for isfinite(), but perhaps less so for operators.

Again, comments welcome.  This is starting to feel like a real
proposal now, but I'm still not at all wedded to it.

            regards, tom lane

diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index ceda48e..adfa571 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -2934,7 +2934,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
         the result written in hexadecimal
        </entry>
        <entry><literal>md5('Th\000omas'::bytea)</literal></entry>
-       <entry><literal>8ab2d3c9689aaf18​b4958c334c82d8b1</literal></entry>
+       <entry><literal>8ab2d3c9689aaf18&break;b4958c334c82d8b1</literal></entry>
       </row>

       <row>
@@ -2985,7 +2985,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
         SHA-224 <link linkend="functions-hash-note">hash</link>
        </entry>
        <entry><literal>sha224('abc'::bytea)</literal></entry>
-       <entry><literal>\x23097d223405d8228642a477bda2​55b32aadbce4bda0b3f7e36c9da7</literal></entry>
+       <entry><literal>\x23097d223405d8228642a477bda2&break;55b32aadbce4bda0b3f7e36c9da7</literal></entry>
       </row>

       <row>
@@ -3000,7 +3000,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
         SHA-256 <link linkend="functions-hash-note">hash</link>
        </entry>
        <entry><literal>sha256('abc'::bytea)</literal></entry>
-       <entry><literal>\xba7816bf8f01cfea414140de5dae2223​b00361a396177a9cb410ff61f20015ad</literal></entry>
+       <entry><literal>\xba7816bf8f01cfea414140de5dae2223&break;b00361a396177a9cb410ff61f20015ad</literal></entry>
       </row>

       <row>
@@ -3015,7 +3015,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
         SHA-384 <link linkend="functions-hash-note">hash</link>
        </entry>
        <entry><literal>sha384('abc'::bytea)</literal></entry>
-
<entry><literal>\xcb00753f45a35e8bb5a03d699ac65007​272c32ab0eded1631a8b605a43ff5bed​8086072ba1e7cc2358baeca134c825a7</literal></entry>
+
<entry><literal>\xcb00753f45a35e8bb5a03d699ac65007&break;272c32ab0eded1631a8b605a43ff5bed&break;8086072ba1e7cc2358baeca134c825a7</literal></entry>
       </row>

       <row>
@@ -3030,7 +3030,7 @@ SELECT format('Testing %3$s, %2$s, %s', 'one', 'two', 'three');
          SHA-512 <link linkend="functions-hash-note">hash</link>
        </entry>
        <entry><literal>sha512('abc'::bytea)</literal></entry>
-
<entry><literal>\xddaf35a193617abacc417349ae204131​12e6fa4e89a97ea20a9eeee64b55d39a​2192992a274fc1a836ba3c23a3feebbd​454d4423643ce80e2a9ac94fa54ca49f</literal></entry>
+
<entry><literal>\xddaf35a193617abacc417349ae204131&break;12e6fa4e89a97ea20a9eeee64b55d39a&break;2192992a274fc1a836ba3c23a3feebbd&break;454d4423643ce80e2a9ac94fa54ca49f</literal></entry>
       </row>

       <row>
@@ -6670,127 +6670,256 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');
      <title>Date/Time Operators</title>

      <tgroup cols="3">
+      <colspec colnum="1" colname="col1" colwidth="0.25*"/>
+      <colspec colnum="2" colname="col2" colwidth="1*"/>
+      <colspec colnum="3" colname="col3" colwidth="1*"/>
+      <spanspec spanname="name" namest="col1" nameend="col1" align="left"/>
+      <spanspec spanname="sig" namest="col2" nameend="col3" align="left"/>
+      <spanspec spanname="desc" namest="col2" nameend="col3" align="left"/>
+      <spanspec spanname="example" namest="col2" nameend="col2" align="left"/>
+      <spanspec spanname="exresult" namest="col3" nameend="col3" align="left"/>
       <thead>
        <row>
-        <entry>Operator</entry>
-        <entry>Example</entry>
-        <entry>Result</entry>
+        <entry spanname="name" align="center" morerows="2">Operator</entry>
+        <entry spanname="sig" align="center">Signature</entry>
+       </row>
+       <row>
+        <entry spanname="desc" align="center">Description</entry>
+       </row>
+       <row>
+        <entry spanname="example" align="center">Example</entry>
+        <entry spanname="exresult" align="center">Example Result</entry>
        </row>
       </thead>

       <tbody>
        <row>
-        <entry> <literal>+</literal> </entry>
-        <entry><literal>date '2001-09-28' + integer '7'</literal></entry>
-        <entry><literal>date '2001-10-05'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>+</literal> </entry>
+        <entry spanname="sig"><type>date</type> <literal>+</literal> <type>integer</type>
+         &returns; <type>date</type></entry>
        </row>
-
        <row>
-        <entry> <literal>+</literal> </entry>
-        <entry><literal>date '2001-09-28' + interval '1 hour'</literal></entry>
-        <entry><literal>timestamp '2001-09-28 01:00:00'</literal></entry>
+        <entry spanname="desc">Add a number of days to a date</entry>
        </row>
-
        <row>
-        <entry> <literal>+</literal> </entry>
-        <entry><literal>date '2001-09-28' + time '03:00'</literal></entry>
-        <entry><literal>timestamp '2001-09-28 03:00:00'</literal></entry>
+        <entry spanname="example"><literal>date '2001-09-28' + 7</literal></entry>
+        <entry spanname="exresult"><literal>2001-10-05</literal></entry>
        </row>

        <row>
-        <entry> <literal>+</literal> </entry>
-        <entry><literal>interval '1 day' + interval '1 hour'</literal></entry>
-        <entry><literal>interval '1 day 01:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>+</literal> </entry>
+        <entry spanname="sig"><type>date</type> <literal>+</literal> <type>interval</type>
+         &returns; <type>timestamp</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Add an interval to a date</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date '2001-09-28' + interval '1 hour'</literal></entry>
+        <entry spanname="exresult"><literal>2001-09-28 01:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>+</literal> </entry>
-        <entry><literal>timestamp '2001-09-28 01:00' + interval '23 hours'</literal></entry>
-        <entry><literal>timestamp '2001-09-29 00:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>+</literal> </entry>
+        <entry spanname="sig"><type>date</type> <literal>+</literal> <type>time</type>
+         &returns; <type>timestamp</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Add a time-of-day to a date</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date '2001-09-28' + time '03:00'</literal></entry>
+        <entry spanname="exresult"><literal>2001-09-28 03:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>+</literal> </entry>
-        <entry><literal>time '01:00' + interval '3 hours'</literal></entry>
-        <entry><literal>time '04:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>+</literal> </entry>
+        <entry spanname="sig"><type>interval</type> <literal>+</literal> <type>interval</type>
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Add intervals</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>interval '1 day' + interval '1 hour'</literal></entry>
+        <entry spanname="exresult"><literal>1 day 01:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>- interval '23 hours'</literal></entry>
-        <entry><literal>interval '-23:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>+</literal> </entry>
+        <entry spanname="sig"><type>timestamp</type> <literal>+</literal> <type>interval</type>
+         &returns; <type>timestamp</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Add an interval to a timestamp</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>timestamp '2001-09-28 01:00' + interval '23 hours'</literal></entry>
+        <entry spanname="exresult"><literal>2001-09-29 00:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>date '2001-10-01' - date '2001-09-28'</literal></entry>
-        <entry><literal>integer '3'</literal> (days)</entry>
+        <entry spanname="name" morerows="2"> <literal>+</literal> </entry>
+        <entry spanname="sig"><type>time</type> <literal>+</literal> <type>interval</type>
+         &returns; <type>time</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Add an interval to a time</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>time '01:00' + interval '3 hours'</literal></entry>
+        <entry spanname="exresult"><literal>04:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>date '2001-10-01' - integer '7'</literal></entry>
-        <entry><literal>date '2001-09-24'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>-</literal> </entry>
+        <entry spanname="sig"><literal>-</literal> <type>interval</type>
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Negate an interval</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>- interval '23 hours'</literal></entry>
+        <entry spanname="exresult"><literal>-23:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>date '2001-09-28' - interval '1 hour'</literal></entry>
-        <entry><literal>timestamp '2001-09-27 23:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>-</literal> </entry>
+        <entry spanname="sig"><type>date</type> <literal>-</literal> <type>date</type>
+         &returns; <type>integer</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract dates</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date '2001-10-01' - date '2001-09-28'</literal></entry>
+        <entry spanname="exresult"><literal>3</literal></entry>
        </row>

        <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>time '05:00' - time '03:00'</literal></entry>
-        <entry><literal>interval '02:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>-</literal> </entry>
+        <entry spanname="sig"><type>date</type> <literal>-</literal> <type>integer</type>
+         &returns; <type>date</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract a number of days from a date</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date '2001-10-01' - 7</literal></entry>
+        <entry spanname="exresult"><literal>2001-09-24</literal></entry>
        </row>

        <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>time '05:00' - interval '2 hours'</literal></entry>
-        <entry><literal>time '03:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>-</literal> </entry>
+        <entry spanname="sig"><type>date</type> <literal>-</literal> <type>interval</type>
+         &returns; <type>timestamp</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract an interval from a date</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date '2001-09-28' - interval '1 hour'</literal></entry>
+        <entry spanname="exresult"><literal>2001-09-27 23:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>timestamp '2001-09-28 23:00' - interval '23 hours'</literal></entry>
-        <entry><literal>timestamp '2001-09-28 00:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>-</literal> </entry>
+        <entry spanname="sig"><type>time</type> <literal>-</literal> <type>time</type>
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract times</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>time '05:00' - time '03:00'</literal></entry>
+        <entry spanname="exresult"><literal>02:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>interval '1 day' - interval '1 hour'</literal></entry>
-        <entry><literal>interval '1 day -01:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>-</literal> </entry>
+        <entry spanname="sig"><type>time</type> <literal>-</literal> <type>interval</type>
+         &returns; <type>time</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract an interval from a time</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>time '05:00' - interval '2 hours'</literal></entry>
+        <entry spanname="exresult"><literal>03:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>-</literal> </entry>
-        <entry><literal>timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'</literal></entry>
-        <entry><literal>interval '1 day 15:00:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>-</literal> </entry>
+        <entry spanname="sig"><type>timestamp</type> <literal>-</literal> <type>interval</type>
+         &returns; <type>timestamp</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract an interval from a timestamp</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>timestamp '2001-09-28 23:00' - interval '23 hours'</literal></entry>
+        <entry spanname="exresult"><literal>2001-09-28 00:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>*</literal> </entry>
-        <entry><literal>900 * interval '1 second'</literal></entry>
-        <entry><literal>interval '00:15:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>-</literal> </entry>
+        <entry spanname="sig"><type>interval</type> <literal>-</literal> <type>interval</type>
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract intervals</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>interval '1 day' - interval '1 hour'</literal></entry>
+        <entry spanname="exresult"><literal>1 day -01:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>*</literal> </entry>
-        <entry><literal>21 * interval '1 day'</literal></entry>
-        <entry><literal>interval '21 days'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>-</literal> </entry>
+        <entry spanname="sig"><type>timestamp</type> <literal>-</literal> <type>timestamp</type>
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract timestamps</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>timestamp '2001-09-29 03:00' - timestamp '2001-09-27
12:00'</literal></entry>
+        <entry spanname="exresult"><literal>1 day 15:00:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>*</literal> </entry>
-        <entry><literal>double precision '3.5' * interval '1 hour'</literal></entry>
-        <entry><literal>interval '03:30:00'</literal></entry>
+        <entry spanname="name" morerows="4"> <literal>*</literal> </entry>
+        <entry spanname="sig"><type>double precision</type> <literal>*</literal> <type>interval</type>
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Multiply an interval by a scalar</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>900 * interval '1 second'</literal></entry>
+        <entry spanname="exresult"><literal>00:15:00</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>21 * interval '1 day'</literal></entry>
+        <entry spanname="exresult"><literal>21 days</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>3.5 * interval '1 hour'</literal></entry>
+        <entry spanname="exresult"><literal>03:30:00</literal></entry>
        </row>

        <row>
-        <entry> <literal>/</literal> </entry>
-        <entry><literal>interval '1 hour' / double precision '1.5'</literal></entry>
-        <entry><literal>interval '00:40:00'</literal></entry>
+        <entry spanname="name" morerows="2"> <literal>/</literal> </entry>
+        <entry spanname="sig"><type>interval</type> <literal>/</literal> <type>double precision</type>
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Divide an interval by a scalar</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>interval '1 hour' / 1.5</literal></entry>
+        <entry spanname="exresult"><literal>00:40:00</literal></entry>
        </row>
       </tbody>
      </tgroup>
@@ -6798,471 +6927,614 @@ SELECT regexp_match('abc01234xyz', '(?:(.*?)(\d+)(.*)){1,1}');

     <table id="functions-datetime-table">
      <title>Date/Time Functions</title>
-     <tgroup cols="5">
+     <tgroup cols="3">
+      <colspec colnum="1" colname="col1" colwidth="1*"/>
+      <colspec colnum="2" colname="col2" colwidth="1*"/>
+      <colspec colnum="3" colname="col3" colwidth="1*"/>
+      <spanspec spanname="name" namest="col1" nameend="col1" align="left"/>
+      <spanspec spanname="sig" namest="col2" nameend="col3" align="left"/>
+      <spanspec spanname="desc" namest="col2" nameend="col3" align="left"/>
+      <spanspec spanname="example" namest="col2" nameend="col2" align="left"/>
+      <spanspec spanname="exresult" namest="col3" nameend="col3" align="left"/>
       <thead>
        <row>
-        <entry>Function</entry>
-        <entry>Return Type</entry>
-        <entry>Description</entry>
-        <entry>Example</entry>
-        <entry>Result</entry>
+        <entry spanname="name" align="center" morerows="2">Function</entry>
+        <entry spanname="sig" align="center">Signature</entry>
+       </row>
+       <row>
+        <entry spanname="desc" align="center">Description</entry>
+       </row>
+       <row>
+        <entry spanname="example" align="center">Example</entry>
+        <entry spanname="exresult" align="center">Example Result</entry>
        </row>
       </thead>

       <tbody>
        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>age</primary>
          </indexterm>
-         <literal><function>age(<type>timestamp</type>, <type>timestamp</type>)</function></literal>
+         <function>age</function>
         </entry>
-        <entry><type>interval</type></entry>
-        <entry>Subtract arguments, producing a <quote>symbolic</quote> result that
+        <entry spanname="sig"><function>age</function>(<type>timestamp</type>, <type>timestamp</type>)
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract arguments, producing a <quote>symbolic</quote> result that
         uses years and months, rather than just days</entry>
-        <entry><literal>age(timestamp '2001-04-10', timestamp '1957-06-13')</literal></entry>
-        <entry><literal>43 years 9 mons 27 days</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>age(timestamp '2001-04-10', timestamp '1957-06-13')</literal></entry>
+        <entry spanname="exresult"><literal>43 years 9 mons 27 days</literal></entry>
        </row>

        <row>
-        <entry><literal><function>age(<type>timestamp</type>)</function></literal></entry>
-        <entry><type>interval</type></entry>
-        <entry>Subtract from <function>current_date</function> (at midnight)</entry>
-        <entry><literal>age(timestamp '1957-06-13')</literal></entry>
-        <entry><literal>43 years 8 mons 3 days</literal></entry>
+        <entry spanname="name" morerows="2"><function>age</function></entry>
+        <entry spanname="sig"><function>age</function>(<type>timestamp</type>)
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Subtract from <function>current_date</function> (at midnight)</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>age(timestamp '1957-06-13')</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>clock_timestamp</primary>
          </indexterm>
-         <literal><function>clock_timestamp()</function></literal>
+         <function>clock_timestamp</function>
         </entry>
-        <entry><type>timestamp with time zone</type></entry>
-        <entry>Current date and time (changes during statement execution);
+        <entry spanname="sig"><function>clock_timestamp</function>()
+         &returns; <type>timestamp with time zone</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Current date and time (changes during statement execution);
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>clock_timestamp()</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>current_date</primary>
          </indexterm>
-         <literal><function>current_date</function></literal>
+         <function>current_date</function>
         </entry>
-        <entry><type>date</type></entry>
-        <entry>Current date;
+        <entry spanname="sig"><function>current_date</function>
+         &returns; <type>date</type></entry>
+       </row>
+       <row>
+         <entry spanname="desc">Current date;
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>current_date</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>current_time</primary>
          </indexterm>
-         <literal><function>current_time</function></literal>
+         <function>current_time</function>
         </entry>
-        <entry><type>time with time zone</type></entry>
-        <entry>Current time of day;
+        <entry spanname="sig"><function>current_time</function>
+         &returns; <type>time with time zone</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Current time of day;
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>current_time</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>current_timestamp</primary>
          </indexterm>
-         <literal><function>current_timestamp</function></literal>
+         <function>current_timestamp</function>
         </entry>
-        <entry><type>timestamp with time zone</type></entry>
-        <entry>Current date and time (start of current transaction);
+        <entry spanname="sig"><function>current_timestamp</function>
+         &returns; <type>timestamp with time zone</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Current date and time (start of current transaction);
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>current_timestamp</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>date_part</primary>
          </indexterm>
-         <literal><function>date_part(<type>text</type>, <type>timestamp</type>)</function></literal>
+         <function>date_part</function>
         </entry>
-        <entry><type>double precision</type></entry>
-        <entry>Get subfield (equivalent to <function>extract</function>);
+        <entry spanname="sig"><function>date_part</function>(<type>text</type>, <type>timestamp</type>)
+         &returns; <type>double precision</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Get subfield (equivalent to <function>extract</function>);
          see <xref linkend="functions-datetime-extract"/>
         </entry>
-        <entry><literal>date_part('hour', timestamp '2001-02-16 20:38:40')</literal></entry>
-        <entry><literal>20</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date_part('hour', timestamp '2001-02-16 20:38:40')</literal></entry>
+        <entry spanname="exresult"><literal>20</literal></entry>
        </row>

        <row>
-        <entry><literal><function>date_part(<type>text</type>, <type>interval</type>)</function></literal></entry>
-        <entry><type>double precision</type></entry>
-        <entry>Get subfield (equivalent to
+        <entry spanname="name" morerows="2"><function>date_part</function></entry>
+        <entry spanname="sig"><function>date_part</function>(<type>text</type>, <type>interval</type>)
+         &returns; <type>double precision</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Get subfield (equivalent to
          <function>extract</function>); see <xref linkend="functions-datetime-extract"/>
         </entry>
-        <entry><literal>date_part('month', interval '2 years 3 months')</literal></entry>
-        <entry><literal>3</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date_part('month', interval '2 years 3 months')</literal></entry>
+        <entry spanname="exresult"><literal>3</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>date_trunc</primary>
          </indexterm>
-         <literal><function>date_trunc(<type>text</type>, <type>timestamp</type>)</function></literal>
+         <function>date_trunc</function>
         </entry>
-        <entry><type>timestamp</type></entry>
-        <entry>Truncate to specified precision; see <xref linkend="functions-datetime-trunc"/>
+        <entry spanname="sig"><function>date_trunc</function>(<type>text</type>, <type>timestamp</type>)
+         &returns; <type>timestamp</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Truncate to specified precision; see <xref linkend="functions-datetime-trunc"/>
         </entry>
-        <entry><literal>date_trunc('hour', timestamp '2001-02-16 20:38:40')</literal></entry>
-        <entry><literal>2001-02-16 20:00:00</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date_trunc('hour', timestamp '2001-02-16 20:38:40')</literal></entry>
+        <entry spanname="exresult"><literal>2001-02-16 20:00:00</literal></entry>
        </row>

        <row>
-        <entry><literal><function>date_trunc(<type>text</type>, <type>timestamp with time zone</type>,
<type>text</type>)</function></literal></entry>
-        <entry><type>timestamp with time zone</type></entry>
-        <entry>Truncate to specified precision in the specified time zone; see <xref
linkend="functions-datetime-trunc"/>
+        <entry spanname="name" morerows="2"><function>date_trunc</function></entry>
+        <entry spanname="sig"><function>date_trunc</function>(<type>text</type>, <type>timestamp with time
zone</type>,<type>text</type>) 
+         &returns; <type>timestamp with time zone</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Truncate to specified precision in the specified time zone; see <xref
linkend="functions-datetime-trunc"/>
         </entry>
-        <entry><literal>date_trunc('day', timestamptz '2001-02-16 20:38:40+00', 'Australia/Sydney')</literal></entry>
-        <entry><literal>2001-02-16 13:00:00+00</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date_trunc('day', timestamptz '2001-02-16 20:38:40+00',
'Australia/Sydney')</literal></entry>
+        <entry spanname="exresult"><literal>2001-02-16 13:00:00+00</literal></entry>
        </row>

        <row>
-        <entry><literal><function>date_trunc(<type>text</type>, <type>interval</type>)</function></literal></entry>
-        <entry><type>interval</type></entry>
-        <entry>Truncate to specified precision; see <xref linkend="functions-datetime-trunc"/>
+        <entry spanname="name" morerows="2"><function>date_trunc</function></entry>
+        <entry spanname="sig"><function>date_trunc</function>(<type>text</type>, <type>interval</type>)
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Truncate to specified precision; see <xref linkend="functions-datetime-trunc"/>
         </entry>
-        <entry><literal>date_trunc('hour', interval '2 days 3 hours 40 minutes')</literal></entry>
-        <entry><literal>2 days 03:00:00</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>date_trunc('hour', interval '2 days 3 hours 40 minutes')</literal></entry>
+        <entry spanname="exresult"><literal>2 days 03:00:00</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>extract</primary>
          </indexterm>
-         <literal><function>extract</function>(<parameter>field</parameter> from
-         <type>timestamp</type>)</literal>
+         <function>extract</function>
         </entry>
-        <entry><type>double precision</type></entry>
-        <entry>Get subfield; see <xref linkend="functions-datetime-extract"/>
+        <entry spanname="sig"><function>extract</function>(<parameter>field</parameter> <literal>from</literal>
<type>timestamp</type>)
+         &returns; <type>double precision</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Get subfield; see <xref linkend="functions-datetime-extract"/>
         </entry>
-        <entry><literal>extract(hour from timestamp '2001-02-16 20:38:40')</literal></entry>
-        <entry><literal>20</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>extract(hour from timestamp '2001-02-16 20:38:40')</literal></entry>
+        <entry spanname="exresult"><literal>20</literal></entry>
        </row>

        <row>
-        <entry><literal><function>extract</function>(<parameter>field</parameter> from
-         <type>interval</type>)</literal></entry>
-        <entry><type>double precision</type></entry>
-        <entry>Get subfield; see <xref linkend="functions-datetime-extract"/>
+        <entry spanname="name" morerows="2"><function>extract</function></entry>
+        <entry spanname="sig"><function>extract</function>(<parameter>field</parameter> <literal>from</literal>
<type>interval</type>)
+         &returns; <type>double precision</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Get subfield; see <xref linkend="functions-datetime-extract"/>
         </entry>
-        <entry><literal>extract(month from interval '2 years 3 months')</literal></entry>
-        <entry><literal>3</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>extract(month from interval '2 years 3 months')</literal></entry>
+        <entry spanname="exresult"><literal>3</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="8">
          <indexterm>
           <primary>isfinite</primary>
          </indexterm>
-         <literal><function>isfinite(<type>date</type>)</function></literal>
+         <function>isfinite</function>
         </entry>
-        <entry><type>boolean</type></entry>
-        <entry>Test for finite date (not +/-infinity)</entry>
-        <entry><literal>isfinite(date '2001-02-16')</literal></entry>
-        <entry><literal>true</literal></entry>
+        <entry spanname="sig"><function>isfinite</function>(<type>date</type>)
+         &returns; <type>boolean</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Test for finite date (not +/-infinity)</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>isfinite(date '2001-02-16')</literal></entry>
+        <entry spanname="exresult"><literal>true</literal></entry>
        </row>

        <row>
-        <entry><literal><function>isfinite(<type>timestamp</type>)</function></literal></entry>
-        <entry><type>boolean</type></entry>
-        <entry>Test for finite time stamp (not +/-infinity)</entry>
-        <entry><literal>isfinite(timestamp '2001-02-16 21:28:30')</literal></entry>
-        <entry><literal>true</literal></entry>
+        <entry spanname="sig"><function>isfinite</function>(<type>timestamp</type>)
+         &returns; <type>boolean</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Test for finite time stamp (not +/-infinity)</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>isfinite(timestamp '2001-02-16 21:28:30')</literal></entry>
+        <entry spanname="exresult"><literal>true</literal></entry>
        </row>

        <row>
-        <entry><literal><function>isfinite(<type>interval</type>)</function></literal></entry>
-        <entry><type>boolean</type></entry>
-        <entry>Test for finite interval</entry>
-        <entry><literal>isfinite(interval '4 hours')</literal></entry>
-        <entry><literal>true</literal></entry>
+        <entry spanname="sig"><function>isfinite</function>(<type>interval</type>)
+         &returns; <type>boolean</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Test for finite interval</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>isfinite(interval '4 hours')</literal></entry>
+        <entry spanname="exresult"><literal>true</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>justify_days</primary>
          </indexterm>
-         <literal><function>justify_days(<type>interval</type>)</function></literal>
+         <function>justify_days</function>
         </entry>
-        <entry><type>interval</type></entry>
-        <entry>Adjust interval so 30-day time periods are represented as months</entry>
-        <entry><literal>justify_days(interval '35 days')</literal></entry>
-        <entry><literal>1 mon 5 days</literal></entry>
+        <entry spanname="sig"><function>justify_days</function>(<type>interval</type>)
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Adjust interval so 30-day time periods are represented as months</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>justify_days(interval '35 days')</literal></entry>
+        <entry spanname="exresult"><literal>1 mon 5 days</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>justify_hours</primary>
          </indexterm>
-         <literal><function>justify_hours(<type>interval</type>)</function></literal>
+         <function>justify_hours</function>
         </entry>
-        <entry><type>interval</type></entry>
-        <entry>Adjust interval so 24-hour time periods are represented as days</entry>
-        <entry><literal>justify_hours(interval '27 hours')</literal></entry>
-        <entry><literal>1 day 03:00:00</literal></entry>
+        <entry spanname="sig"><function>justify_hours</function>(<type>interval</type>)
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Adjust interval so 24-hour time periods are represented as days</entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>justify_hours(interval '27 hours')</literal></entry>
+        <entry spanname="exresult"><literal>1 day 03:00:00</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>justify_interval</primary>
          </indexterm>
-         <literal><function>justify_interval(<type>interval</type>)</function></literal>
+         <function>justify_interval</function>
         </entry>
-        <entry><type>interval</type></entry>
-        <entry>Adjust interval using <function>justify_days</function> and <function>justify_hours</function>, with
additionalsign adjustments</entry> 
-        <entry><literal>justify_interval(interval '1 mon -1 hour')</literal></entry>
-        <entry><literal>29 days 23:00:00</literal></entry>
+        <entry spanname="sig"><function>justify_interval</function>(<type>interval</type>)
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Adjust interval using <function>justify_days</function> and
<function>justify_hours</function>,with additional sign adjustments</entry> 
+       </row>
+       <row>
+        <entry spanname="example"><literal>justify_interval(&break;interval '1 mon -1 hour')</literal></entry>
+        <entry spanname="exresult"><literal>29 days 23:00:00</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>localtime</primary>
          </indexterm>
-         <literal><function>localtime</function></literal>
+         <function>localtime</function>
         </entry>
-        <entry><type>time</type></entry>
-        <entry>Current time of day;
+        <entry spanname="sig"><function>localtime</function>
+         &returns; <type>time</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Current time of day;
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>localtime</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>localtimestamp</primary>
          </indexterm>
-         <literal><function>localtimestamp</function></literal>
+         <function>localtimestamp</function>
         </entry>
-        <entry><type>timestamp</type></entry>
-        <entry>Current date and time (start of current transaction);
+        <entry spanname="sig"><function>localtimestamp</function>
+         &returns; <type>timestamp</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Current date and time (start of current transaction);
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>localtimestamp</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>make_date</primary>
          </indexterm>
-         <literal>
-            <function>
-             make_date(<parameter>year</parameter> <type>int</type>,
-             <parameter>month</parameter> <type>int</type>,
-             <parameter>day</parameter> <type>int</type>)
-            </function>
-         </literal>
+         <function>make_date</function>
         </entry>
-        <entry><type>date</type></entry>
-        <entry>
+        <entry spanname="sig"><function>make_date</function>(<parameter>year</parameter> <type>int</type>,
+         <parameter>month</parameter> <type>int</type>,
+         <parameter>day</parameter> <type>int</type>)
+         &returns; <type>date</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">
          Create date from year, month and day fields
         </entry>
-        <entry><literal>make_date(2013, 7, 15)</literal></entry>
-        <entry><literal>2013-07-15</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>make_date(2013, 7, 15)</literal></entry>
+        <entry spanname="exresult"><literal>2013-07-15</literal></entry>
        </row>

        <row>
-        <entry>
-         <indexterm>
+        <entry spanname="name" morerows="2"><indexterm>
           <primary>make_interval</primary>
          </indexterm>
-         <literal>
-          <function>
-           make_interval(<parameter>years</parameter> <type>int</type> DEFAULT 0,
-           <parameter>months</parameter> <type>int</type> DEFAULT 0,
-           <parameter>weeks</parameter> <type>int</type> DEFAULT 0,
-           <parameter>days</parameter> <type>int</type> DEFAULT 0,
-           <parameter>hours</parameter> <type>int</type> DEFAULT 0,
-           <parameter>mins</parameter> <type>int</type> DEFAULT 0,
-           <parameter>secs</parameter> <type>double precision</type> DEFAULT 0.0)
-          </function>
-         </literal>
+         <function>make_interval</function>
         </entry>
-        <entry><type>interval</type></entry>
-        <entry>
+        <entry spanname="sig"><function>make_interval</function>(<optional> <parameter>year</parameter>
<type>int</type>
+         <optional>, <parameter>month</parameter> <type>int</type>
+         <optional>, <parameter>week</parameter> <type>int</type>
+         <optional>, <parameter>day</parameter> <type>int</type>
+         <optional>, <parameter>hour</parameter> <type>int</type>
+         <optional>, <parameter>min</parameter> <type>int</type>
+         <optional>, <parameter>sec</parameter> <type>double precision</type>
+         </optional></optional></optional></optional></optional></optional></optional>)
+         &returns; <type>interval</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">
          Create interval from years, months, weeks, days, hours, minutes and
-         seconds fields
+         seconds fields, each of which can default to zero
         </entry>
-        <entry><literal>make_interval(days => 10)</literal></entry>
-        <entry><literal>10 days</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>make_interval(days => 10)</literal></entry>
+        <entry spanname="exresult"><literal>10 days</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>make_time</primary>
          </indexterm>
-         <literal>
-          <function>
-           make_time(<parameter>hour</parameter> <type>int</type>,
-           <parameter>min</parameter> <type>int</type>,
-           <parameter>sec</parameter> <type>double precision</type>)
-          </function>
-         </literal>
+         <function>make_time</function>
         </entry>
-        <entry><type>time</type></entry>
-        <entry>
+        <entry spanname="sig"><function>make_time</function>(<parameter>hour</parameter> <type>int</type>,
+         <parameter>min</parameter> <type>int</type>,
+         <parameter>sec</parameter> <type>double precision</type>)
+         &returns; <type>time</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">
          Create time from hour, minute and seconds fields
         </entry>
-        <entry><literal>make_time(8, 15, 23.5)</literal></entry>
-        <entry><literal>08:15:23.5</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>make_time(8, 15, 23.5)</literal></entry>
+        <entry spanname="exresult"><literal>08:15:23.5</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>make_timestamp</primary>
          </indexterm>
-         <literal>
-          <function>
-           make_timestamp(<parameter>year</parameter> <type>int</type>,
-           <parameter>month</parameter> <type>int</type>,
-           <parameter>day</parameter> <type>int</type>,
-           <parameter>hour</parameter> <type>int</type>,
-           <parameter>min</parameter> <type>int</type>,
-           <parameter>sec</parameter> <type>double precision</type>)
-          </function>
-         </literal>
+         <function>make_timestamp</function>
         </entry>
-        <entry><type>timestamp</type></entry>
-        <entry>
+        <entry spanname="sig"><function>make_timestamp</function>(<parameter>year</parameter> <type>int</type>,
+         <parameter>month</parameter> <type>int</type>,
+         <parameter>day</parameter> <type>int</type>,
+         <parameter>hour</parameter> <type>int</type>,
+         <parameter>min</parameter> <type>int</type>,
+         <parameter>sec</parameter> <type>double precision</type>)
+         &returns; <type>timestamp</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">
          Create timestamp from year, month, day, hour, minute and seconds fields
         </entry>
-        <entry><literal>make_timestamp(2013, 7, 15, 8, 15, 23.5)</literal></entry>
-        <entry><literal>2013-07-15 08:15:23.5</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>make_timestamp(2013, 7, 15, 8, 15, 23.5)</literal></entry>
+        <entry spanname="exresult"><literal>2013-07-15 08:15:23.5</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>make_timestamptz</primary>
          </indexterm>
-         <literal>
-          <function>
-           make_timestamptz(<parameter>year</parameter> <type>int</type>,
-           <parameter>month</parameter> <type>int</type>,
-           <parameter>day</parameter> <type>int</type>,
-           <parameter>hour</parameter> <type>int</type>,
-           <parameter>min</parameter> <type>int</type>,
-           <parameter>sec</parameter> <type>double precision</type>,
-           <optional> <parameter>timezone</parameter> <type>text</type> </optional>)
-          </function>
-         </literal>
+         <function>make_timestamptz</function>
         </entry>
-        <entry><type>timestamp with time zone</type></entry>
-        <entry>
+        <entry spanname="sig"><function>make_timestamptz</function>(<parameter>year</parameter> <type>int</type>,
+         <parameter>month</parameter> <type>int</type>,
+         <parameter>day</parameter> <type>int</type>,
+         <parameter>hour</parameter> <type>int</type>,
+         <parameter>min</parameter> <type>int</type>,
+         <parameter>sec</parameter> <type>double precision</type>
+         <optional>, <parameter>timezone</parameter> <type>text</type> </optional>)
+         &returns; <type>timestamp with time zone</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">
          Create timestamp with time zone from year, month, day, hour, minute
          and seconds fields; if <parameter>timezone</parameter> is not
          specified, the current time zone is used
         </entry>
-        <entry><literal>make_timestamptz(2013, 7, 15, 8, 15, 23.5)</literal></entry>
-        <entry><literal>2013-07-15 08:15:23.5+01</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>make_timestamptz(2013, 7, 15, 8, 15, 23.5)</literal></entry>
+        <entry spanname="exresult"><literal>2013-07-15 08:15:23.5+01</literal></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>now</primary>
          </indexterm>
-         <literal><function>now()</function></literal>
+         <function>now</function>
         </entry>
-        <entry><type>timestamp with time zone</type></entry>
-        <entry>Current date and time (start of current transaction);
+        <entry spanname="sig"><function>now</function>()
+         &returns; <type>timestamp with time zone</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Current date and time (start of current transaction);
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>now()</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>statement_timestamp</primary>
          </indexterm>
-         <literal><function>statement_timestamp()</function></literal>
+         <function>statement_timestamp</function>
         </entry>
-        <entry><type>timestamp with time zone</type></entry>
-        <entry>Current date and time (start of current statement);
+        <entry spanname="sig"><function>statement_timestamp</function>()
+         &returns; <type>timestamp with time zone</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Current date and time (start of current statement);
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>statement_timestamp()</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>timeofday</primary>
          </indexterm>
-         <literal><function>timeofday()</function></literal>
+         <function>timeofday</function>
         </entry>
-        <entry><type>text</type></entry>
-        <entry>Current date and time
+        <entry spanname="sig"><function>timeofday</function>()
+         &returns; <type>text</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Current date and time
          (like <function>clock_timestamp</function>, but as a <type>text</type> string);
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>timeofday()</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
        </row>

        <row>
-        <entry>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>transaction_timestamp</primary>
          </indexterm>
-         <literal><function>transaction_timestamp()</function></literal>
+         <function>transaction_timestamp</function>
         </entry>
-        <entry><type>timestamp with time zone</type></entry>
-        <entry>Current date and time (start of current transaction);
+        <entry spanname="sig"><function>transaction_timestamp</function>()
+         &returns; <type>timestamp with time zone</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Current date and time (start of current transaction);
          see <xref linkend="functions-datetime-current"/>
         </entry>
-        <entry></entry>
-        <entry></entry>
        </row>
        <row>
-        <entry>
+        <entry spanname="example"><literal>transaction_&break;timestamp()</literal></entry>
+        <entry spanname="exresult"><replaceable>variable</replaceable></entry>
+       </row>
+       <row>
+        <entry spanname="name" morerows="2">
          <indexterm>
           <primary>to_timestamp</primary>
          </indexterm>
-         <literal><function>to_timestamp(<type>double precision</type>)</function></literal>
+         <function>to_timestamp</function>
         </entry>
-        <entry><type>timestamp with time zone</type></entry>
-        <entry>Convert Unix epoch (seconds since 1970-01-01 00:00:00+00) to
+        <entry spanname="sig"><function>to_timestamp</function>(<type>double precision</type>)
+         &returns; <type>timestamp with time zone</type></entry>
+       </row>
+       <row>
+        <entry spanname="desc">Convert Unix epoch (seconds since 1970-01-01 00:00:00+00) to
          timestamp</entry>
-        <entry><literal>to_timestamp(1284352323)</literal></entry>
-        <entry><literal>2010-09-13 04:32:03+00</literal></entry>
+       </row>
+       <row>
+        <entry spanname="example"><literal>to_timestamp(&break;1284352323)</literal></entry>
+        <entry spanname="exresult"><literal>2010-09-13 04:32:03+00</literal></entry>
        </row>
       </tbody>
      </tgroup>
@@ -8236,52 +8508,83 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple

   <table id="functions-enum-table">
     <title>Enum Support Functions</title>
-    <tgroup cols="4">
+    <tgroup cols="3">
+     <colspec colnum="1" colname="col1" colwidth="0.5*"/>
+     <colspec colnum="2" colname="col2" colwidth="1*"/>
+     <colspec colnum="3" colname="col3" colwidth="1*"/>
+     <spanspec spanname="name" namest="col1" nameend="col1" align="left"/>
+     <spanspec spanname="sig" namest="col2" nameend="col3" align="left"/>
+     <spanspec spanname="desc" namest="col2" nameend="col3" align="left"/>
+     <spanspec spanname="example" namest="col2" nameend="col2" align="left"/>
+     <spanspec spanname="exresult" namest="col3" nameend="col3" align="left"/>
      <thead>
       <row>
-       <entry>Function</entry>
-       <entry>Description</entry>
-       <entry>Example</entry>
-       <entry>Example Result</entry>
+       <entry spanname="name" align="center" morerows="2">Function</entry>
+       <entry spanname="sig" align="center">Signature</entry>
+      </row>
+      <row>
+       <entry spanname="desc" align="center">Description</entry>
+      </row>
+      <row>
+       <entry spanname="example" align="center">Example</entry>
+       <entry spanname="exresult" align="center">Example Result</entry>
       </row>
      </thead>
      <tbody>
       <row>
-       <entry>
-         <indexterm>
-          <primary>enum_first</primary>
-         </indexterm>
-         <literal>enum_first(anyenum)</literal>
+       <entry spanname="name" morerows="2">
+        <indexterm>
+         <primary>enum_first</primary>
+        </indexterm>
+        <function>enum_first</function>
        </entry>
-       <entry>Returns the first value of the input enum type</entry>
-       <entry><literal>enum_first(null::rainbow)</literal></entry>
-       <entry><literal>red</literal></entry>
+       <entry spanname="sig"><function>enum_first</function>(<type>anyenum</type>) &returns;
<type>anyenum</type></entry>
       </row>
       <row>
-       <entry>
-         <indexterm>
-          <primary>enum_last</primary>
-         </indexterm>
-         <literal>enum_last(anyenum)</literal>
+       <entry spanname="desc">Returns the first value of the input enum type</entry>
+      </row>
+      <row>
+       <entry spanname="example"><literal>enum_first(&break;null::rainbow)</literal></entry>
+       <entry spanname="exresult"><literal>red</literal></entry>
+      </row>
+      <row>
+       <entry spanname="name" morerows="2">
+        <indexterm>
+         <primary>enum_last</primary>
+        </indexterm>
+        <function>enum_last</function>
        </entry>
-       <entry>Returns the last value of the input enum type</entry>
-       <entry><literal>enum_last(null::rainbow)</literal></entry>
-       <entry><literal>purple</literal></entry>
+       <entry spanname="sig"><function>enum_last</function>(<type>anyenum</type>) &returns;
<type>anyenum</type></entry>
       </row>
       <row>
-       <entry>
-         <indexterm>
-          <primary>enum_range</primary>
-         </indexterm>
-         <literal>enum_range(anyenum)</literal>
+       <entry spanname="desc">Returns the last value of the input enum type</entry>
+      </row>
+      <row>
+       <entry spanname="example"><literal>enum_last(&break;null::rainbow)</literal></entry>
+       <entry spanname="exresult"><literal>purple</literal></entry>
+      </row>
+      <row>
+       <entry spanname="name" morerows="2">
+        <indexterm>
+         <primary>enum_range</primary>
+        </indexterm>
+        <function>enum_range</function>
        </entry>
-       <entry>Returns all values of the input enum type in an ordered array</entry>
-       <entry><literal>enum_range(null::rainbow)</literal></entry>
-       <entry><literal>{red,orange,yellow,green,blue,purple}</literal></entry>
+       <entry spanname="sig"><function>enum_range</function>(<type>anyenum</type>) &returns;
<type>anyarray</type></entry>
+      </row>
+      <row>
+       <entry spanname="desc">Returns all values of the input enum type in an ordered array</entry>
+      </row>
+      <row>
+       <entry spanname="example"><literal>enum_range(&break;null::rainbow)</literal></entry>
+       <entry spanname="exresult"><literal>{red,orange,yellow,&break;green,blue,purple}</literal></entry>
+      </row>
+      <row>
+       <entry spanname="name" morerows="4"><function>enum_range</function></entry>
+       <entry spanname="sig"><function>enum_range</function>(<type>anyenum</type>, <type>anyenum</type>) &returns;
<type>anyarray</type></entry>
       </row>
       <row>
-       <entry morerows="2"><literal>enum_range(anyenum, anyenum)</literal></entry>
-       <entry morerows="2">
+       <entry spanname="desc">
         Returns the range between the two given enum values, as an ordered
         array. The values must be from the same enum type. If the first
         parameter is null, the result will start with the first value of
@@ -8289,16 +8592,18 @@ CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple
         If the second parameter is null, the result will end with the last
         value of the enum type.
        </entry>
-       <entry><literal>enum_range('orange'::rainbow, 'green'::rainbow)</literal></entry>
-       <entry><literal>{orange,yellow,green}</literal></entry>
       </row>
       <row>
-       <entry><literal>enum_range(NULL, 'green'::rainbow)</literal></entry>
-       <entry><literal>{red,orange,yellow,green}</literal></entry>
+       <entry spanname="example"><literal>enum_range(&break;'orange'::rainbow, 'green'::rainbow)</literal></entry>
+       <entry spanname="exresult"><literal>{orange,yellow,green}</literal></entry>
+      </row>
+      <row>
+       <entry spanname="example"><literal>enum_range(NULL, 'green'::rainbow)</literal></entry>
+       <entry spanname="exresult"><literal>{red,orange,yellow,&break;green}</literal></entry>
       </row>
       <row>
-       <entry><literal>enum_range('orange'::rainbow, NULL)</literal></entry>
-       <entry><literal>{orange,yellow,green,blue,purple}</literal></entry>
+       <entry spanname="example"><literal>enum_range(&break;'orange'::rainbow, NULL)</literal></entry>
+       <entry spanname="exresult"><literal>{orange,yellow,green,&break;blue,purple}</literal></entry>
       </row>
      </tbody>
     </tgroup>
diff --git a/doc/src/sgml/postgres.sgml b/doc/src/sgml/postgres.sgml
index e59cba7..bfe5661 100644
--- a/doc/src/sgml/postgres.sgml
+++ b/doc/src/sgml/postgres.sgml
@@ -11,6 +11,12 @@

 <!ENTITY reference  SYSTEM "reference.sgml">

+<!-- zero-width space; use this to allow line breaks within table cells -->
+<!ENTITY break "​">
+
+<!-- right arrow; use this to introduce function/operator return types -->
+<!ENTITY returns "→">
+
 ]>

 <book id="postgres">

Attachment

pgsql-docs by date:

Previous
From: PG Doc comments form
Date:
Subject: pg_buffercache query example results misleading, grouping by just relname, needs schema_name
Next
From: Alexander Lakhin
Date:
Subject: Re: Getting our tables to render better in PDF output