Re: Emitting JSON to file using COPY TO

From: Junwang Zhao <zhjwpku(at)gmail(dot)com>
To: jian he <jian(dot)universality(at)gmail(dot)com>
Cc: Florents Tselai <florents(dot)tselai(at)gmail(dot)com>, Joe Conway <mail(at)joeconway(dot)com>, "Andrey M(dot) Borodin" <x4mmm(at)yandex-team(dot)ru>, Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com>, Daniel Verite <daniel(at)manitou-mail(dot)org>, Andrew Dunstan <andrew(at)dunslane(dot)net>, Davin Shearer <davin(at)apache(dot)org>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Emitting JSON to file using COPY TO
Date: 2026-02-06 06:19:11
Message-ID: CAEG8a3KBQjfY9zu8F7NGX=g-7B-mW3-U7bD+OLQ0cFeFzigDkw@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers

On Fri, Feb 6, 2026 at 11:26 AM jian he <jian(dot)universality(at)gmail(dot)com> wrote:
>
> On Wed, Feb 4, 2026 at 12:41 AM Florents Tselai
> <florents(dot)tselai(at)gmail(dot)com> wrote:
> >
> > I (and others I assume) would really like to see this in 19;
> > glancing at the thread above and in the test cases I see this is in good shape for comitter review.
> > No?
> >
> > If I were to add something it would be an example in copy.sgml
> > <para>
> > When the <literal>FORCE_ARRAY</literal> option is enabled,
> > the entire output is wrapped in a JSON array and individual rows are separated by commas:
> > <programlisting>
> > COPY (SELECT id, name FROM users) TO STDOUT (FORMAT JSON, FORCE_ARRAY);
> > </programlisting>
> > <programlisting>
> > [
> > {"id": 1, "name": "Alice"}
> > ,{"id": 2, "name": "Bob"}
> > ,{"id": 3, "name": "Charlie"}
> > ]
> > </programlisting>
> > </para>
> >
>
> v23-0003-Add-option-force_array-for-COPY-JSON-FORMAT.patch
> I've added:
>
> +<para>
> + When the <literal>FORCE_ARRAY</literal> option is enabled,
> + the entire output is wrapped in a single JSON array with rows
> separated by commas:
> +<programlisting>
> +COPY (SELECT * FROM (VALUES(1),(2)) val(id)) TO STDOUT (FORMAT JSON,
> FORCE_ARRAY);
> +</programlisting>
> +The output is as follows:
> +<screen>
> +[
> + {"id":1}
> +,{"id":2}
> +]
> +</screen>
> +</para>
> +
> +
>
> > Also, apologies if that has been discussed already,
> > is there a good reason why didn't we just go with a simple "WRAP_ARRAY" ?
> >
>
> I don’t have a particular preference.
> If the consensus is that WRAP_ARRAY is better than FORCE_ARRAY, we can
> change it accordingly.

+0.5 for WRAP_ARRAY

>
>
> --
> jian
> https://www.enterprisedb.com/

--
Regards
Junwang Zhao

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message jian he 2026-02-06 06:43:47 Re: pg_dumpall --roles-only interact with other options
Previous Message Thomas Munro 2026-02-06 05:11:50 Re: [PING] fallocate() causes btrfs to never compress postgresql files

Browse pgsql-general by date

  From Date Subject
Previous Message jian he 2026-02-06 03:26:04 Re: Emitting JSON to file using COPY TO