Обсуждение: [Patch] Binary Transfer v12
Hi. I have updated the binary transfer patch against latest CVS/HEAD. http://wiki.postgresql.org/wiki/JDBC-BinaryTransfer Best regards, Jesper
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
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
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
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
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