Обсуждение: [Patch] Binary Transfer v12

Поиск
Список
Период
Сортировка

[Patch] Binary Transfer v12

От
Jesper Pedersen
Дата:
Hi.

I have updated the binary transfer patch against latest CVS/HEAD.

 http://wiki.postgresql.org/wiki/JDBC-BinaryTransfer

Best regards,
 Jesper

Re: [Patch] Binary Transfer v12

От
"Albe Laurenz"
Дата:
Jesper Pedersen wrote:
> I have updated the binary transfer patch against latest CVS/HEAD.
>
>  http://wiki.postgresql.org/wiki/JDBC-BinaryTransfer

Sounds great!

Did you test it with both little-endian and big-endian servers?
With 32-bit and 64-bit servers?

I don't know for sure, but all this *might* affect the binary format.

Yours,
Laurenz Albe

Re: [Patch] Binary Transfer v12

От
Mikko Tiihonen
Дата:
Albe Laurenz wrote:
> Jesper Pedersen wrote:
>> I have updated the binary transfer patch against latest CVS/HEAD.
>>
>>  http://wiki.postgresql.org/wiki/JDBC-BinaryTransfer
>
> Sounds great!
>
> Did you test it with both little-endian and big-endian servers?
> With 32-bit and 64-bit servers?

I have only tested with 64bit amd64 servers.

Luckily the protocol is well defined to always use network byte order:
http://developer.postgresql.org/pgdocs/postgres/protocol-message-types.html

The incompatible bits of the protocol are in feature flags.

For example the time can either be a double as seconds or long as microseconds.
The default has just changed in 8.4, but the binary transfer patch has supported
both since the beginning.

> I don't know for sure, but all this *might* affect the binary format.

But now you got me wondering...

The protocol messages itself are well defined, but I cannot find any
documentation about the data value contents because there is no official
documentation. I had to just guess how the values are stored. Based on the data
type byte sizes in database, for example look here:
http://developer.postgresql.org/pgdocs/postgres/datatype-datetime.html

-Mikko

Re: [Patch] Binary Transfer v12

От
"Albe Laurenz"
Дата:
Mikko Tiihonen wrote:
>> Did you test it with both little-endian and big-endian servers?
>> With 32-bit and 64-bit servers?
>
> I have only tested with 64bit amd64 servers.
>
[...]
>
> But now you got me wondering...
>
> The protocol messages itself are well defined, but I cannot find any
> documentation about the data value contents because there is no official
> documentation. I had to just guess how the values are stored. Based on the data
> type byte sizes in database, for example look here:
> http://developer.postgresql.org/pgdocs/postgres/datatype-datetime.html

Unfortunately I don't know the implementation details.
Maybe binary values come as they are on disk, see the note in the COPY
documentation:
http://developer.postgresql.org/pgdocs/postgres/sql-copy.html

I have a (big-endian) AIX machine where I could test it as soon as the
patch is in. Is there a convenient test program?

Yours,
Laurenz Albe

Re: [Patch] Binary Transfer v12

От
Tom Lane
Дата:
Mikko Tiihonen <mikko.tiihonen@nitorcreations.com> writes:
> The protocol messages itself are well defined, but I cannot find any
> documentation about the data value contents because there is no official
> documentation. I had to just guess how the values are stored.

"Use the source, Luke" ... you're supposed to consult the backend
"foo_send" and "foo_recv" routines if you are in doubt about the
on-the-wire representation of type foo.  Someday we should get around
to transposing that information into the SGML docs, but it's not a
real high-priority item.

            regards, tom lane

Re: [Patch] Binary Transfer v12

От
"Albe Laurenz"
Дата:
I wrote:
> >> Did you test it with both little-endian and big-endian servers?
> >> With 32-bit and 64-bit servers?
> >
> > I have only tested with 64bit amd64 servers.
> >
> [...]
> >
> > But now you got me wondering...
> >
> > The protocol messages itself are well defined, but I cannot find any
> > documentation about the data value contents because there is no official
> > documentation. I had to just guess how the values are stored. Based on the data
> > type byte sizes in database, for example look here:
> >
> http://developer.postgresql.org/pgdocs/postgres/datatype-datetime.html
>
> Unfortunately I don't know the implementation details.
> Maybe binary values come as they are on disk, see the note in the COPY
> documentation:
> http://developer.postgresql.org/pgdocs/postgres/sql-copy.html
>
> I have a (big-endian) AIX machine where I could test it as soon as the
> patch is in. Is there a convenient test program?

I tried to select int2, int4, int8 and float8 on both 32-bit Linux and
64-bit AIX, and the binary representations for all the values were
identical. Looks good, but it is only a small test sample.

Yours,
Laurenz Albe