On Fri, Nov 2, 2018 at 5:15 PM Andrew Dunstan <andrew.duns...@2ndquadrant.com> wrote: > On 11/02/2018 05:20 PM, Andres Freund wrote: > > Hi, > > > > On 2018-11-02 17:02:24 -0400, Andrew Dunstan wrote: > >> On 11/02/2018 11:34 AM, Merlin Moncure wrote: > >>> Binary format consuming applications already have to deal with these > >>> kinds of issues. We already expose internal structures in the other > >>> functions -- not sure why jsonb is held to a different standard. For > >>> other data types where format changes were made, the standard of > >>> 'caveat version' was in place to protect the user. For jsonb we > >>> decided to implement a version flag within the type itself, which I > >>> thought mistake at the time -- better to have a version header in the > >>> COPY BINARY if needed. > >>> > >> > >> jsonb_send does output a version header, as I pointed out upthread. > > That's Merlin's point I think. For reasons I don't quite understand he > > doesn't like that. Yes, a global solution would have been prettier than > > per-datum version flag, but that obvioulsy wasn't realistic to introduce > > around the feature freeze of the version that introduced jsonb. > > > Oh, hmm. It would have been a big change of little value, ISTM. One byte > of overhead per jsonb datum for a version indicator doesn't seem a huge > price to pay.
Yeah -- it really isn't. My concern was more that it seemed odd to protect one type with a version flag where others aren't; format agreement strikes me as more of a protocol negotiation thing than an aspect of each individual data point. It also makes for slightly odd (IMO) client side coding. The contract is of concern, not the overhead. It works well enough though...we discussed this a bit when the header was introduced and the discussion ended exactly the same way :-). merlin