Dave Cramer wrote:
> > This argument for leaving 3 as the column count makes sense to me. I
> > agree this content is not meant to facilitate interpreting the contents at
> > a protocol level.
> >
>
> I'd disagree. From my POV if the data comes back as a JSON Array this is
> one object and this should be reflected in the column count.
The doc says this:
"Int16
The number of columns in the data to be copied (denoted N below)."
and this formulation is repeated in PQnfields() for libpq:
"PQnfields
Returns the number of columns (fields) to be copied."
How to interpret that sentence?
"to be copied" from what, into what, and by what way?
A plausible interpretation is "to be copied from the source data
into the COPY stream, by the backend". So the number of columns
to be copied likely refers to the columns of the dataset, not the
"in-transit form" that is text or csv or json.
The interpetation you're proposing also makes sense, that it's just
one json column per row, or even a single-row single-column for the
entire dataset in the force_array case, but then the question is why
isn't that number of columns always 1 for the original "text" format,
since each row is represented in the stream as a single long piece of
text?
Best regards,
--
Daniel Vérité
https://postgresql.verite.pro/
Twitter: @DanielVerite