Thread: 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.