diff --git a/doc/src/sgml/datatype.sgml b/doc/src/sgml/datatype.sgml index 9bb40e73f2261d58a81b9a06a000ece32686c819..1bd7d6125cdbb89a839c6f7c5bcddf40a8ea22ad 100644 --- a/doc/src/sgml/datatype.sgml +++ b/doc/src/sgml/datatype.sgml @@ -12,8 +12,7 @@ <productname>Postgres</productname> has a rich set of native data types available to users. Users may add new types to <productname>Postgres</productname> using the - <command>DEFINE TYPE</command> - command described elsewhere. + <command>DEFINE TYPE</command> command. </para> <para> @@ -80,14 +79,14 @@ <entry>exact numeric for p <= 9, s = 0</entry> </row> <row> - <entry>float4/8</entry> - <entry>float(p)</entry> - <entry>floating-point number with precision p</entry> + <entry>float4</entry> + <entry>float(<replaceable>p</replaceable>), <replaceable>p</replaceable> < 7</entry> + <entry>floating-point number with precision <replaceable>p</replaceable></entry> </row> <row> <entry>float8</entry> - <entry>real, double precision</entry> - <entry>double-precision floating-point number</entry> + <entry>float(<replaceable>p</replaceable>), 7 <= <replaceable>p</replaceable> < 16</entry> + <entry>floating-point number with precision <replaceable>p</replaceable></entry> </row> <row> <entry>inet</entry> @@ -109,6 +108,11 @@ <entry></entry> <entry>signed 8-byte integer</entry> </row> + <row> + <entry>interval</entry> + <entry>interval</entry> + <entry>general-use time span</entry> + </row> <row> <entry>line</entry> <entry></entry> @@ -155,9 +159,9 @@ <entry>time of day</entry> </row> <row> - <entry>timespan</entry> - <entry>interval</entry> - <entry>general-use time span</entry> + <entry>timetz</entry> + <entry>time with time zone</entry> + <entry>time of day, including time zone</entry> </row> <row> <entry>timestamp</entry> @@ -179,8 +183,11 @@ <para> The <type>cidr</type> and <type>inet</type> types are designed to handle any IP type but only ipv4 is handled in the current implementation. - Everything here that talks about ipv4 will apply to ipv6 in a future release.</para> - </note></para> + Everything here that talks about ipv4 will apply to ipv6 in a + future release. + </para> + </note> + </para> <para> <table tocentry="1"> @@ -230,7 +237,8 @@ which are ill considered and which should not live through subsequent standards. <productname>Postgres</productname> will not make great efforts to conform to these features; however, these tend to apply in little-used - or obsure cases, and a typical user is not likely to run into them.</para> + or obsure cases, and a typical user is not likely to run into them. + </para> <para> Most of the input and output functions corresponding to the @@ -244,7 +252,7 @@ </para> <para> - Note that some of the input and output functions are not invertible. That is, + Some of the input and output functions are not invertible. That is, the result of an output function may lose precision when compared to the original input. @@ -256,7 +264,8 @@ most of the intrinsic precision of the type (typically 15 digits for doubles, 6 digits for 4-byte floats). Other types with underlying floating point fields (e.g. geometric - types) carry similar precision.</para> + types) carry similar precision. + </para> </note> </para> @@ -390,7 +399,6 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl <command>DROP SEQUENCE</command>. </para> </sect2> - </sect1> <sect1> @@ -399,8 +407,9 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl <note> <title>Obsolete Type</title> <para> - The <type>money</type> is now obsolete. Use <type>numeric</type> - or <type>decimal</type> instead. + The <type>money</type> is now deprecated. Use <type>numeric</type> + or <type>decimal</type> instead. The money type may become a + locale-aware layer over the numeric type in a future release. </para> </note> @@ -453,8 +462,8 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl <productname>Postgres</productname> supports these types, in addition to the more general <type>text</type> type, which unlike <type>varchar</type> - does not require an upper - limit to be declared on the size of the field. + does not require an explicit declared upper + limit on the size of the field. </para> <para> @@ -501,15 +510,15 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </para> <para> - There is one other fixed-length character type. + There is one other fixed-length character type in <productname>Postgres</productname>. The <type>name</type> type - only has one purpose and that is to provide - <productname>Postgres</productname> with a - special type to use for internal names. + only has one purpose and that is for storage of internal catalog + names. It is not intended for use by the general user. - It's length is currently defined as 32 chars + Its length is currently defined as 32 bytes (31 characters plus terminator) but should be reference using NAMEDATALEN. - This is set at compile time and may change in a future release. + The length is set at compile time (and is therefore adjustable for + special uses); the default maximum length may change in a future release. </para> <para> @@ -528,7 +537,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl <row> <entry>name</entry> <entry>32 bytes</entry> - <entry>Thirty-two character internal type</entry> + <entry>Thirty-one character internal type</entry> </row> </tbody> </tgroup> @@ -569,6 +578,14 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl <entry>AD 1465001</entry> <entry>1 microsec / 14 digits</entry> </row> + <row> + <entry><type>timestamp with time zone</type></entry> + <entry>date and time including time zone</entry> + <entry>8 bytes</entry> + <entry>1903 AD</entry> + <entry>2037 AD</entry> + <entry>1 microsec / 14 digits</entry> + </row> <row> <entry><type>interval</type></entry> <entry>for time intervals</entry> @@ -593,6 +610,14 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl <entry>23:59:59.99</entry> <entry>1 microsecond</entry> </row> + <row> + <entry><type>time with time zone</type></entry> + <entry>times of the day</entry> + <entry>4 bytes</entry> + <entry>00:00:00.00+12</entry> + <entry>23:59:59.99-12</entry> + <entry>1 microsecond</entry> + </row> </tbody> </tgroup> </table> @@ -603,8 +628,9 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl we also continue to provide <type>datetime</type> (equivalent to <type>timestamp</type>) and <type>timespan</type> (equivalent to <type>interval</type>). The types <type>abstime</type> and <type>reltime</type> are lower precision types which are used internally. - You are discouraged from using any of these types in new applications and move any old - ones over when appropriate. Any or all of these type might disappear in a future release. + You are discouraged from using any of these types in new + applications and are encouraged to move any old + ones over when appropriate. Any or all of these types might disappear in a future release. </para> </note> </para> @@ -615,18 +641,19 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl <para> Date and time input is accepted in almost any reasonable format, including - <acronym>ISO</acronym>-compatible, <acronym>SQL</acronym>-compatible, + <acronym>ISO-8601</acronym>, <acronym>SQL</acronym>-compatible, traditional <productname>Postgres</productname>, and others. The ordering of month and day in date input can be ambiguous, therefore a setting - exists, to specify how it should be interpreted. The command + exists to specify how it should be interpreted. The command <literal>SET DateStyle TO 'US'</literal> or <literal>SET DateStyle TO 'NonEuropean'</literal> specifies the variant <quote>month before day</quote>, the command <literal>SET DateStyle TO 'European'</literal> sets the variant - <quote>day before month</quote>. The former is the default. + <quote>day before month</quote>. The <literal>US</literal> style + is the default but this default can be changed at compile time or at run time. </para> <para> - See <xref linkend="datetime-appendix-title" endterm="datetime-appendix-title"> + See <xref endterm="datetime-appendix-title" linkend="datetime-appendix-title"> for the exact parsing rules of date/time input and for the recognized time zones. </para> @@ -639,6 +666,7 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl <title>date</title> <para> The following are possible inputs for the <type>date</type> type. + <table tocentry="1"> <title><productname>PostgreSQL</productname> Date Input</title> <titleabbrev>Date Inputs</titleabbrev> @@ -813,13 +841,84 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </sect3> <sect3> - <title>time</title> - <para> - The following are valid <type>time</type> inputs. - <table tocentry="1"> - <title><productname>PostgreSQL</productname> Time Input</title> - <titleabbrev>Time Inputs</titleabbrev> - <tgroup cols="2"> + <title>time</title> + <para> + The following are valid <type>time</type> inputs. + + <table tocentry="1"> + <title><productname>PostgreSQL</productname> Time Input</title> + <titleabbrev>Time Inputs</titleabbrev> + <tgroup cols="2"> + <thead> + <row> + <entry>Example</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row> + <entry>04:05:06.789</entry> + <entry>ISO-8601</entry> + </row> + <row> + <entry>04:05:06</entry> + <entry>ISO-8601</entry> + </row> + <row> + <entry>04:05</entry> + <entry>ISO-8601</entry> + </row> + <row> + <entry>040506</entry> + <entry>ISO-8601</entry> + </row> + <row> + <entry>04:05 AM</entry> + <entry>Same as 04:05; AM does not affect value</entry> + </row> + <row> + <entry>04:05 PM</entry> + <entry>Same as 16:05; input hour must be <= 12</entry> + </row> + <row> + <entry>z</entry> + <entry>Same as 00:00:00</entry> + </row> + <row> + <entry>zulu</entry> + <entry>Same as 00:00:00</entry> + </row> + <row> + <entry>allballs</entry> + <entry>Same as 00:00:00</entry> + </row> + </tbody> + </tgroup> + </table> + </para> + </sect3> + + <sect3> + <title>time with time zone</title> + <para> + This type is defined by SQL92, but the definition exhibits + fundamental deficiencies which renders the type near useless. In + most cases, a combination of <type>date</type>, + <type>time</type>, and <type>timestamp with time zone</type> + should provide a complete range of date/time functionality + required by an application. + </para> + + <para> + <type>time with time zone</type> accepts all input also legal + for the <type>time</type> type, appended with a legal time zone, + as follows: + + <table tocentry="1"> + <title><productname>PostgreSQL</productname> Time With Time + Zone Input</title> + <titleabbrev>Time With Time Zone Inputs</titleabbrev> + <tgroup cols="2"> <thead> <row> <entry>Example</entry> @@ -828,45 +927,30 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (<replaceabl </thead> <tbody> <row> - <entry>04:05:06.789</entry> + <entry>04:05:06.789-8</entry> <entry>ISO-8601</entry> </row> <row> - <entry>04:05:06</entry> + <entry>04:05:06-08:00</entry> <entry>ISO-8601</entry> </row> <row> - <entry>04:05</entry> + <entry>04:05-08:00</entry> <entry>ISO-8601</entry> </row> <row> - <entry>040506</entry> + <entry>040506-08/entry> <entry>ISO-8601</entry> </row> - <row> - <entry>04:05 AM</entry> - <entry>Same as 04:05; AM does not affect value</entry> - </row> - <row> - <entry>04:05 PM</entry> - <entry>Same as 16:05; input hour must be <= 12</entry> - </row> - <row> - <entry>z</entry> - <entry>Same as 00:00:00</entry> - </row> - <row> - <entry>zulu</entry> - <entry>Same as 00:00:00</entry> - </row> - <row> - <entry>allballs</entry> - <entry>Same as 00:00:00</entry> - </row> </tbody> </tgroup> </table> </para> + + <para> + Refer to <xref endterm="timezone-title" linkend="timezone"> for + more examples of time zones. + </para> </sect3> <sect3> @@ -888,8 +972,8 @@ January 8 04:05:06 1999 PST </para> <para> - <table tocentry="1"> - <title><productname>PostgreSQL</productname> Time Zone Input</title> + <table tocentry="1" id="timezone"> + <title id="timezone-title"><productname>PostgreSQL</productname> Time Zone Input</title> <titleabbrev>Time Zone Inputs</titleabbrev> <tgroup cols="2"> <thead>