Hi, While testing the new COPY JSON format, I noticed the column list ordering is ignored when the list mentions every column of the relation. CSV and TEXT formats respect the order; JSON does not.
CREATE TABLE t (a int, b int);
INSERT INTO t VALUES (1, 2);
COPY t (b, a) TO STDOUT WITH (FORMAT csv); -- "2,1"
COPY t (b, a) TO STDOUT WITH (FORMAT json); -- {"a":1,"b":2}
-- expected: {"b":2,"a":1}
In BeginCopyTo() (commit 7dadd38cda9), the JSON path builds a custom
TupleDesc only when the column list is shorter than the relation:
if (rel && list_length(cstate->attnumlist) < tupDesc->natts)
When the user provides a full column list reordered, list_length
equals natts, so the natural TupleDesc is reused.
Fix is to extend the condition to also fire when an explicit column list
was supplied (attnamelist != NIL).
All 245 regression tests pass.
Thanks,
Baji Shaik.
0001-COPY-TO-FORMAT-JSON-respect-column-list-order.patch
Description: Binary data
