Обсуждение: converting time_t to timestamp?
Greetings,
I'm reposting this question since I received zero replies from my
original post (maybe the original subject line was misleading).
I've just^W upgraded from PostgreSQL 7.1.2 to 7.3.2.
In 7.1.2 I was able to use the output of time(2) (and the like) to
insert into a field of timestamp type.
First thing i noticed with the upgrade was that the following broke:
in 7.1.2 => select timestamp ( 1046923200 ); timestamp ------------------------ 2003-03-05 20:00:00-08 (1
row)
in 7.3.2 => select timestamp ( 1046923200 ); ERROR: TIMESTAMP(1046923200) precision must be between 0 and 6
Can anyone point me to a work-around?
I notice that I can use abstime( 1046923200 ) to get the desired
result. But is this the optimal way to do this?
My client application uses mktime(3) and then forms the SQL
statement to insert into a table of the form:
sprintf( sql_stmt, "insert into tab1 " " ( ... , target_timestamp, ... ) " "values
(... , timestamp( %lu ), ... ) ", ..., mktime( &tm ) ); /* * You get the idea.
*/
Thanks in advance,
sidster
--
They who would sacrifice freedom for security will have neither. -Ben Franklin
On Tue, 11 Mar 2003, patrick wrote: > I'm reposting this question since I received zero replies from my > original post (maybe the original subject line was misleading). > I've just^W upgraded from PostgreSQL 7.1.2 to 7.3.2. > > In 7.1.2 I was able to use the output of time(2) (and the like) to > insert into a field of timestamp type. > > First thing i noticed with the upgrade was that the following broke: The old syntax somewhat conflicted with the full type specifier when we added the precision stuff. Unfortunately, the change caught alot of people. :( > > in 7.1.2 > => select timestamp ( 1046923200 ); > timestamp > ------------------------ > 2003-03-05 20:00:00-08 > (1 row) > > in 7.3.2 > => select timestamp ( 1046923200 ); > ERROR: TIMESTAMP(1046923200) precision must be between 0 and 6 > > > Can anyone point me to a work-around? > > I notice that I can use abstime( 1046923200 ) to get the desired > result. But is this the optimal way to do this? 'epoch'::timestamp + (<integer> * '1 second'::interval); seems more explicit to me (in its intention), but probably isn't as efficient as the int4->abstime->timestamp path.