Binary encoding of timetz type
Hi folks,
Apologies if it's the wrong place to ask. I have a question for postgres
developers.
I wrote parser for COPY binary encoding. Everything is great but one thing
worries me. It seems like the time offset field has reversed digit sign.
I'm referring to this function
https://github.com/postgres/postgres/blob/REL_13_STABLE/src/backend/utils/adt/date.c#L2150-L2159
COPY response for value *'13:37:00-0300'::timetz* gives me binary
0x0000000b69d1d70000002a30. And value *'13:37:00+0300'::timetz* is encoded
as 0x0000000b69d1d700ffffd5d0.
0xffffd5d0 is -10800 for signed integer and 0x00002a30 is 10800.
I reverse the sign in my code but feeling that I'm missing something is
nagging me. Please advise.
Ruslan <ruslan@d19i00d0skgddi.cloudfront.net> writes:
I wrote parser for COPY binary encoding. Everything is great but one thing
worries me. It seems like the time offset field has reversed digit sign.
I'm referring to this function
https://github.com/postgres/postgres/blob/REL_13_STABLE/src/backend/utils/adt/date.c#L2150-L2159
Reversed compared to what? The code you quote is clearly sending the
internal representation as-is.
There's a lot of confusion in the world about whether positive timezone
offsets correspond to being east or west of Greenwich (not helped any
by the fact that there are relevant standards using both interpretations).
I think that our internal form uses positive-is-west, a/k/a POSIX rules,
but I'm too lazy to go check right now.
regards, tom lane
On Tue, Mar 16, 2021 at 1:31 PM Ruslan <ruslan@walkmind.com> wrote:
Hi folks,
Apologies if it's the wrong place to ask. I have a question for postgres developers.
I wrote parser for COPY binary encoding. Everything is great but one thing worries me. It seems like the time offset field has reversed digit sign. I'm referring to this function
https://github.com/postgres/postgres/blob/REL_13_STABLE/src/backend/utils/adt/date.c#L2150-L2159
COPY response for value '13:37:00-0300'::timetz gives me binary 0x0000000b69d1d70000002a30. And value '13:37:00+0300'::timetz is encoded as 0x0000000b69d1d700ffffd5d0.
0xffffd5d0 is -10800 for signed integer and 0x00002a30 is 10800.
I reverse the sign in my code but feeling that I'm missing something is nagging me. Please advise.
Check out libpqtypes -- it has client side send/receive functions for
binary format you can crib from.
https://github.com/pgagarinov/libpqtypes/blob/master/source/src/datetime.c
merlin
On Mon, Mar 22, 2021 at 08:11:55PM -0500, Merlin Moncure wrote:
Check out libpqtypes -- it has client side send/receive functions for
binary format you can crib from.https://github.com/pgagarinov/libpqtypes/blob/master/source/src/datetime.c
merlin
Hi,
I just wanted to +1 the libpqtypes. An excellent piece of work.
Regards,
Ken