From e14a9deb93ae80db9db3d7524a3359a9fec89e7d Mon Sep 17 00:00:00 2001 From: Tom Lane <tgl@sss.pgh.pa.us> Date: Wed, 21 Feb 2001 23:15:24 +0000 Subject: [PATCH] Document timeofday(), mention start-of-transaction vs. current-time semantics, a few other small improvements. --- doc/src/sgml/func.sgml | 67 +++++++++++++++++++++++++++++++++++------- 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index e7d825b5181..de7ef9c0324 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,4 +1,4 @@ -<!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.53 2001/02/19 00:01:18 tgl Exp $ --> +<!-- $Header: /cvsroot/pgsql/doc/src/sgml/func.sgml,v 1.54 2001/02/21 23:15:24 tgl Exp $ --> <chapter id="functions"> <title>Functions and Operators</title> @@ -2197,6 +2197,17 @@ reasonable at all for that matter. <entry></entry> </row> + <row> + <entry>timeofday()</entry> + <entry>text</entry> + <entry> + returns high-precision date and time; see also <link + linkend="functions-datetime-current">below</link> + </entry> + <entry>timeofday()</entry> + <entry>Wed Feb 21 17:01:13.000126 2001 EST</entry> + </row> + <row> <entry>timestamp(date)</entry> <entry>timestamp</entry> @@ -2627,7 +2638,8 @@ SELECT date_trunc('year', TIMESTAMP '2001-02-16 20:38:40'); <title>Current Date/Time</title> <para> - The following functions are available to select the current date and/or time: + The following functions are available to obtain the current date and/or + time: <synopsis> CURRENT_TIME CURRENT_DATE @@ -2641,13 +2653,13 @@ CURRENT_TIMESTAMP <informalexample> <screen> SELECT CURRENT_TIME; -<computeroutput>19:07:13</computeroutput> +<computeroutput>19:07:32</computeroutput> SELECT CURRENT_DATE; <computeroutput>2001-02-17</computeroutput> SELECT CURRENT_TIMESTAMP; -<computeroutput>2001-02-17 19:07:32+00</computeroutput> +<computeroutput>2001-02-17 19:07:32-05</computeroutput> </screen> </informalexample> @@ -2655,9 +2667,42 @@ SELECT CURRENT_TIMESTAMP; The function <function>now()</function> is the traditional <productname>Postgres</productname> equivalent to <function>CURRENT_TIMESTAMP</function>. - <productname>Postgres</productname> furthermore has special - date/time <quote>constants</quote> that can be used to specify the - current time. The following three all return the same result: + </para> + + <para> + There is also <function>timeofday()</function>, which returns current + time to higher precision than the <function>CURRENT_TIMESTAMP</function> + family does: + </para> + + <informalexample> +<screen> +SELECT timeofday(); + Sat Feb 17 19:07:32.000126 2001 EST +</screen> + </informalexample> + + <para> + <function>timeofday()</function> uses the operating system call + <function>gettimeofday(2)</function>, which may have resolution as + good as microseconds (depending on your platform); the other functions + rely on <function>time(2)</function> which is restricted to one-second + resolution. For historical reasons, <function>timeofday()</function> + returns its result as a text string rather than a timestamp value. + </para> + + <para> + It is quite important to realize that + <function>CURRENT_TIMESTAMP</function> and related functions all return + the time as of the start of the current transaction; their values do not + increment while a transaction is running. But + <function>timeofday()</function> returns the actual current time. + </para> + + <para> + All the date/time datatypes also accept the special literal value + <literal>now</> to specify the current date and time. Thus, + the following three all return the same result: <programlisting> SELECT CURRENT_TIMESTAMP; SELECT now(); @@ -2666,11 +2711,13 @@ SELECT TIMESTAMP 'now'; <note> <para> You do not want to use the third form when specifying a DEFAULT - value when creating a table. The system will immediately - evaluate the constant, thus when the default value is needed, + value while creating a table. The system will convert <literal>now</> + to a timestamp as soon as the constant is parsed, so that when + the default value is needed, the time of the table creation would be used! The first two forms will not be evaluated until the default value is used, - because they are function calls. + because they are function calls. Thus they will give the desired + behavior of defaulting to the time of row insertion. </para> </note> </para> -- GitLab