Re: Emitting JSON to file using COPY TO
Joe Conway <mail@joeconway.com>
From: Joe Conway <mail@joeconway.com>
To: Andrew Dunstan <andrew@dunslane.net>, Davin Shearer <davin@apache.org>,
PostgreSQL-development <pgsql-hackers@postgreSQL.org>
Date: 2023-12-03T17:11:34Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add option force_array for COPY JSON FORMAT
- 4c0390ac53b7 19 (unreleased) landed
-
json format for COPY TO
- 7dadd38cda95 19 (unreleased) landed
-
introduce CopyFormat, refactor CopyFormatOptions
- a2145605ee3d 19 (unreleased) landed
-
Doc: add IDs to copy.sgml's <varlistentry> and <refsect1>
- e4018f891dec 19 (unreleased) cited
On 12/3/23 11:03, Joe Conway wrote: > From your earlier post, regarding constructing the aggregate -- not > extensive testing but one data point: > 8<-------------------------- > test=# copy foo to '/tmp/buf' (format json, force_array); > COPY 10000000 > Time: 36353.153 ms (00:36.353) > test=# copy (select json_agg(foo) from foo) to '/tmp/buf'; > COPY 1 > Time: 46835.238 ms (00:46.835) > 8<-------------------------- Also if the table is large enough, the aggregate method is not even feasible whereas the COPY TO method works: 8<-------------------------- test=# select count(*) from foo; count ---------- 20000000 (1 row) test=# copy (select json_agg(foo) from foo) to '/tmp/buf'; ERROR: out of memory DETAIL: Cannot enlarge string buffer containing 1073741822 bytes by 1 more bytes. test=# copy foo to '/tmp/buf' (format json, force_array); COPY 20000000 8<-------------------------- -- Joe Conway PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com