[PATCH] COPY TO FORMAT json: respect column list order - Mailing list pgsql-hackers

From Baji Shaik
Subject [PATCH] COPY TO FORMAT json: respect column list order
Date
Msg-id CA+fm-RPOGQEJhoJP4xRtjfDXPBT8P-ttG2-Ey2Ak30QiESdU_Q@mail.gmail.com
Whole thread
Responses Re: [PATCH] COPY TO FORMAT json: respect column list order
List pgsql-hackers
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.
Attachment

pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: BackgroundPsql swallowing errors on windows
Next
From: Tom Lane
Date:
Subject: Re: Use \if/\endif to remove non-libxml2 expected output in regression tests