On 5/25/21 4:10 PM, Tom Lane wrote: > Magnus Hagander <mag...@hagander.net> writes: >> On Tue, May 25, 2021 at 12:55 PM Aleksander Alekseev >> <aleksan...@timescale.com> wrote: >>> Back in 2016 while being at PostgresPro I developed the ZSON extension [1]. >>> The extension introduces the new ZSON type, which is 100% compatible with >>> JSONB but uses a shared dictionary of strings most frequently used in given >>> JSONB documents for compression. >> If the extension is mature enough, why make it an extension in >> contrib, and not instead either enhance the existing jsonb type with >> it or make it a built-in type? > IMO we have too d*mn many JSON types already. If we can find a way > to shoehorn this optimization into JSONB, that'd be great. Otherwise > I do not think it's worth the added user confusion. > > Also, even if ZSON was "100% compatible with JSONB" back in 2016, > a whole lot of features have been added since then. Having to > duplicate all that code again for a different data type is not > something I want to see us doing. So that's an independent reason > for wanting to hide this under the existing type not make a new one.
I take your point. However, there isn't really any duplication. It's handled by this: CREATE FUNCTION jsonb_to_zson(jsonb) RETURNS zson AS 'MODULE_PATHNAME' LANGUAGE C STRICT IMMUTABLE; CREATE FUNCTION zson_to_jsonb(zson) RETURNS jsonb AS 'MODULE_PATHNAME' LANGUAGE C STRICT IMMUTABLE; CREATE CAST (jsonb AS zson) WITH FUNCTION jsonb_to_zson(jsonb) AS ASSIGNMENT; CREATE CAST (zson AS jsonb) WITH FUNCTION zson_to_jsonb(zson) AS IMPLICIT; cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com