libpq: COPY FROM STDIN BINARY of arrays

Started by Dominique Devienneabout 3 years ago3 messagesgeneral
Jump to latest
#1Dominique Devienne
ddevienne@gmail.com

Hi,

I already use arrays fine (e.g. text[]) in BINARY mode binds (with prepared
statement or not).
I already use COPY FROM STDIN BINARY fine, with scalar values.

But for the 1st time, I'm combining COPY with arrays,
and it is NOT fine yet :(

#08P01: ERROR: insufficient data left in message
CONTEXT: COPY UT_LibPQ_copy_arrays, line 1, column ptys

Does the wire-format of arrays differ between binary-binds and binary-copy?
Any pointers to what I could look at, to resolve this? doc? code? example?

Thanks, --DD

PS: If that helps, I'm willing to detail the break-down of all values /
bytes I'm sending

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dominique Devienne (#1)
Re: libpq: COPY FROM STDIN BINARY of arrays

Dominique Devienne <ddevienne@gmail.com> writes:

Does the wire-format of arrays differ between binary-binds and binary-copy?

No.

Any pointers to what I could look at, to resolve this? doc? code? example?

array_send and array_recv might help you. Keep in mind that maybe the
problem is with array element(s) not the array structure proper.

regards, tom lane

#3Dominique Devienne
ddevienne@gmail.com
In reply to: Tom Lane (#2)
Re: libpq: COPY FROM STDIN BINARY of arrays

On Thu, Mar 30, 2023 at 6:00 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:

Dominique Devienne <ddevienne@gmail.com> writes:

Does the wire-format of arrays differ between binary-binds and

binary-copy?

No.

An update on this, I think I figure it out, by comparing with COPY TO
STDOUT WITH (FORMAT BINARY).
I was missing the byte-count "header" for the array. Since I'm reusing my
binary-bind code for COPY,
I'm missing the 4 bytes for the array's "total encoded byte length" before
the array data proper.
Now that I understand the issue, should be a simple matter to fix. Thanks
for chiming in Tom. --DD