pgsql: COPY TO FORMAT JSON: respect column list order

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: COPY TO FORMAT JSON: respect column list order
Date: 2026-06-27 22:10:21
Message-ID: E1wdbED-000SMd-0p@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

COPY TO FORMAT JSON: respect column list order

When COPY TO with FORMAT json is given an explicit column list that
names all columns in a different order, the JSON output incorrectly
used the table's physical column order instead of the requested order.

This happened because BeginCopyTo() only built a restricted TupleDesc
when list_length(attnumlist) < tupDesc->natts. When all columns are
listed (just reordered), this condition was false and no projected
TupleDesc was built, causing CopyToJsonOneRow() to emit columns in
physical order.

Fix by also building the projected TupleDesc when an explicit column
list was provided (attnamelist != NIL), even if it names all columns.

Author: Baji Shaik <baji(dot)pgdev(at)gmail(dot)com>
Reviewed-by: Andrew Dunstan <andrew(at)dunslane(dot)net>
Discussion: https://postgr.es/m/CA+fm-ROd4cNKM524n6EdgtZ9xOzOHJDNv8J_9Mvr2+2t1qWSDw@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/effb923d9dec8fd4a5102fee80e52d65d86747c8

Modified Files
--------------
src/backend/commands/copyto.c | 14 +++++++++-----
src/test/regress/expected/copy.out | 9 +++++++++
src/test/regress/sql/copy.sql | 9 +++++++++
3 files changed, 27 insertions(+), 5 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Andrew Dunstan 2026-06-28 00:05:59 pgsql: pgindent fix for commit effb923d9de
Previous Message Peter Eisentraut 2026-06-27 17:42:33 pgsql: Reject child partition FDWs in FOR PORTION OF