Re: [PATCH] Reject ENCODING option for COPY TO FORMAT JSON
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Ayush Tiwari <ayushtiwari.slg01@gmail.com>
Cc: pgsql-hackers@postgresql.org, andrew@dunslane.net
Date: 2026-04-20T13:39:44Z
Lists: pgsql-hackers
Ayush Tiwari <ayushtiwari.slg01@gmail.com> writes: > COPY TO FORMAT JSON silently accepts the ENCODING option but doesn't > perform encoding conversion(?) CopyToJsonOneRow() sends the output of > composite_to_json() via CopySendData() without calling > pg_server_to_any(), unlike the text and CSV paths. > COPY t TO '/tmp/out.json' WITH (FORMAT json, ENCODING 'LATIN1'); > On a UTF-8 server this produces UTF-8 output, not LATIN1. Seems to me the correct thing here is to make it work like the other cases, ie perform pg_server_to_any(). I have exactly no sympathy for the argument about the RFC saying it must be UTF-8, not least because that's not in fact what is implemented (what if the server encoding isn't UTF-8?). Rejecting this option altogether doesn't improve anything, not functionally, not specs-compliance-wise, nor according to the principle of least surprise. > The attached patch rejects the explicit ENCODING option for JSON > mode, consistent with how DELIMITER, NULL, DEFAULT, and HEADER are > already rejected. The implicit client_encoding case is a separate > design question (should COPY TO JSON always emit UTF-8 regardless > of client_encoding?) that maybe we should address separately and not as > part of v19. No, you don't get to punt this till later. Once we ship v19 there's going to be a strong expectation of backwards compatibility. The idea of sending UTF-8 to a client that's set client_encoding to something else would be risible, if it weren't a security hazard. regards, tom lane
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Apply encoding conversion in COPY TO FORMAT JSON
- 7dc5bbcf220b 19 (unreleased) landed