Michael Meskes wrote:
> On Tue, Oct 21, 2008 at 10:21:38AM +0200, Matthieu Imbert wrote:
>> I would like to be able to get results from SQL commands directly in a
>> binary format, instead of a textual one. Actually, I want to be able to
>> get timestamps with their full precision (microsecond).
> 
> Are you sure you cannot get those in textual mode? If so I wonder why I got
> some numbers in a quick test:
> 
> ...
> [NO_PID]: ecpg_execute on line 37: query: select  *  from date_test where d = 
>  $1   ; with 1 parameter(s) on connection regress1
> [NO_PID]: sqlca: code: 0, state: 00000
> [NO_PID]: ecpg_execute on line 37: using PQexecParams
> [NO_PID]: sqlca: code: 0, state: 00000
> [NO_PID]: free_params on line 37: parameter 1 = 1966-01-17
> [NO_PID]: sqlca: code: 0, state: 00000
> [NO_PID]: ecpg_execute on line 37: correctly got 1 tuples with 2 fields
> [NO_PID]: sqlca: code: 0, state: 00000
> [NO_PID]: ecpg_get_data on line 37: RESULT: 1966-01-17 offset: -1; array: yes
> [NO_PID]: sqlca: code: 0, state: 00000
> [NO_PID]: ecpg_get_data on line 37: RESULT: 2000-07-12 17:34:29.140787 
> offset: -1; array: yes
> [NO_PID]: sqlca: code: 0, state: 00000
> ...
> 
> What do I miss here?
> 
> Michael


Yes microseconds are available in textual mode but i do want to use binary 
mode. Let me explain why:

- my data will be time series. So typical requests will return lots of 
timestamped data (mainly floats or int).

- after extraction i need to have all timestamps stored in format convenient 
for calculations. I can accommodate different formats
(for example: number of microseconds since 2000-01-01, or a structure similar 
to pg_tm (but with microsecond precision), or a
time-format similar to one defined in rfc1305), but definitely storing 
timestamps as text is a no go for me.

so i have two choices:

scenario 1 - parse the textual representation of all results of requests to the 
database and convert textual timestamps to a binary
format that i choose among those ones (number of microseconds since 2000-01-01, 
or a structure similar to pg_tm (but with
microsecond precision), or a time-format similar to one defined in rfc1305, or 
something else)

or

scenario 2 - directly use pgsql binary timestamp format. I think the latter is 
far more efficient. I'm new to postgresql, but from
what i understand, here are the conversions involved in both scenarios (hopping 
that my ascii art won't be garbled by your mail
clients ;-) :


scenario 1:
.---------.  .----------.  .---------.  .----------.  .--------------.  
.----------.  .---------.
|timestamp|  |pgsql     |  |timestamp|  |pgsql     |  |timestamp     |  |my     
   |  |my       |
|storage  |->|internal  |->|storage  |->|network   |->|as            
|->|timestamp |->|timestamp|
|in       |  |to        |  |in       |  |to        |  |textual       |  
|conversion|  |format   |
|database |  |network   |  |network  |  |textual   |  |representation|  
|routines  |  |         |
|backend  |  |conversion|  |         |  |conversion|  |              |  |       
   |  |         |
|         |  |function  |  |         |  |function  |  |              |  |       
   |  |         |
'---------'  '----------'  '---------'  '----------'  '--------------'  
'----------'  '---------'

scenario 2:
.---------.  .----------.  .---------.  .----------.  .---------.
|timestamp|  |pgsql     |  |timestamp|  |pgsql     |  |timestamp|
|storage  |->|internal  |->|storage  |->|network   |->|official |
|in       |  |to        |  |in       |  |to        |  |format   |
|database |  |network   |  |network  |  |offical   |  |         |
|backend  |  |conversion|  |         |  |conversion|  |         |
|         |  |function  |  |         |  |function  |  |         |
'---------'  '----------'  '---------'  '----------'  '---------'

if i'm correct, it seems obvious that the second scenario is more efficient 
(and less ugly).

In scenario 2, when talking about timestamp 'official' format, i mean timestamp 
expressed as number of microseconds since
2000-01-01. But of course, it only deserves this name 'official' if it is 
guaranteed to stay the same across postgresql versions and
platforms

-- 
Matthieu

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to